web-dev-qa-db-fra.com

Afficher uniquement les publications avec vignette à l'aide de WP_Query

J'éprouve des difficultés à ne montrer que les messages contenant des images utilisant la boucle. Mon niveau PHP est basique et toute aide sera vraiment utile.

Donc, fondamentalement, ceci est mon code original:

if( have_posts() ) { 
    while( have_posts() ) { 
        the_post();
        get_template_part( 'inc/template-parts/content', $post_layout );
        // and some other stuff
    }
}

J'ai essayé les conseils de ce fil - Comment puis-je vérifier si une publication a une vignette dans WP_Query? Mais sans aucun succès. Lorsque j'implémente le code, tous les messages disparaissent de la page d'accueil.

C'est le code que j'ai essayé:

$query = new WP_Query( $thumbs );
$thumbs = array(
    'meta_query' => array( 'key' => '_thumbnail_id' ) 
);
if( $query->have_posts() ) { 
    while( $query->have_posts() ) { 
        $query->the_post();
        get_template_part( 'inc/template-parts/content', $post_layout );
    } 
} 

Tout conseil sera apprécié! Cordialement

2
tslid

Vous devez définir vos arguments avant vous les transmettez à WP_Query, pas après. De plus, votre meta_query devrait être un tableau d'un tableau, pas simplement un tableau

Ce

 $query = new WP_Query($thumbs);
 $thumbs = array(
        'meta_query' => array('key' => '_thumbnail_id') 
 );

devrait ressembler à ceci

 $thumbs = array(
    'meta_query' => array( 
        array(
            'key' => '_thumbnail_id'
        ) 
    )
 );

 $query = new WP_Query($thumbs);

MODIFIER

Juste quelques notes supplémentaires

  • Assurez-vous de réinitialiser les données postérieures après une requête personnalisée. Ajoutez simplement wp_reset_postdata(); avant de fermer votre déclaration if et juste après la fermeture de votre déclaration while

  • Je crois qu'une requête personnalisée pourrait ne pas être nécessaire ici. Si je lis bien votre question, vous pouvez simplement utiliser pre_get_posts pour modifier la requête principale. Vous ne devez pas utiliser une requête personnalisée simplement parce que vous souhaitez modifier la requête principale.

9
Pieter Goosen