web-dev-qa-db-fra.com

get_post () retourne post même si elle est mise à la corbeille

Je développe un thème WordPress. Je sélectionne un message en tant que "article vedette" dans les paramètres du personnalisateur. Je souhaite afficher ce message différemment sur la page d'accueil. J'utilise le code suivant pour obtenir le post sur home.php:

$featured_post = get_post( get_theme_mod( 'featured_post_id' ) );

Ce code fonctionne parfaitement pour obtenir le post. Mais, après avoir sélectionné ce message en tant que message vedette, si je le jette, il reste affiché en tant que message vedette sur la page d'accueil. Si je le supprime définitivement, il ne sera pas affiché.

Comment utiliser get_post() pour obtenir le message qui n'est pas mis à la corbeille?

1
Nilesh G

Ce n'est pas comme ça que fonctionne get_post(). Supprimer la publication ne change pas la valeur du thème theme, et le mod thème va toujours pointer vers cette publication dans la base de données, donc get_post() la récupérera consciencieusement tant qu'elle sera là.

C'est à vous de vous assurer que son statut correspond à celui que vous souhaitez avant de l'afficher:

$featured_post = get_post( get_theme_mod( 'featured_post_id' ) );

if ( $featured_post && $featured_post->post_status === 'publish' ) {
    // Display post
}

Vous pouvez également faire un WP_Query ou get_posts() (pluriel) pour interroger les publications avec le statut publish et l'ID que vous avez, mais cela finira probablement par plus de lignes de code et légèrement plus lent que la vérification du statut de toute façon.

2
Jacob Peattie