web-dev-qa-db-fra.com

Interroger les messages uniquement avec l'image sélectionnée

Je souhaite interroger 6 messages, mais uniquement ceux auxquels une image sélectionnée est jointe. J'utilise la méthode meta_key pour cela avec WP_Query en tant que tel:

$args = array(
    'post_type'  => 'post',
    'meta_key' => '_thumbnail_id',
    'post_count' => 6 );
$query = new WP_Query($args);

Suivi par

<?php while($query->have_posts()) : $query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <?php the_post_thumbnail('thumbnail'); ?>
<?php endwhile; ?>

Cela ne semble pas fonctionner. La requête renvoie plus de 6 messages, ainsi que ceux qui ne possèdent pas d'image en vedette. Des idées ce que je me suis trompé ici?

@chip: var_dump($query); donne un résultat important, je l'ai donc posté dans Pastebin

13
harryg

Lors de l'exécution de l'importateur, vous devez cocher la case pour télécharger et importer tous les supports/pièces jointes.

Si vous ne le faites pas, les articles auront toujours un jeu d'images en vedette, mais la pièce jointe à laquelle ils font référence ne sera pas valide et toute tentative d'appeler the_post_thumbnail échouera. En utilisant votre code, vous obtiendrez simplement le titre du message, et aucune vignette. Cela donnerait l'impression que les publications qui n'ont pas d'image sélectionnée sont insérées. Ce n'est pas le cas, elles ont une image sélectionnée, elle n'est tout simplement pas disponible en raison de l'erreur que vous avez commise lors de l'importation.

Supprimez vos publications et importez à nouveau en utilisant les paramètres appropriés.

Également, pour démontrer ce que vous avez dit, vous n’avez pas tenté de vérifier les publications. Vérifiez toujours, par exemple:

if ( $query->have_posts() ) { // you never checked to see if no posts were found
    while($query->have_posts()) { // alt style syntax doesn't work with most IDEs
        $query->the_post(); // individual statement should be on individual line
        ?><h2><?php the_title(); ?></h2><?php // you only need open/close tags here, not every line, save yourself some time typing
        if ( has_post_thumbnail() ) { // only print out the thumbnail if it actually has one
            echo '<p>post says it has a featured image</p>'; // double checking
            the_post_thumbnail('thumbnail');
        } else {
            echo '<p>this post does not have a featured image</p>';
        }
    }
} else {
    echo '<p>no posts found</p>';
}

Si vous n'avez pas coché la case, vous obtiendrez des images indiquant qu'elles ont une image sélectionnée, mais aucune image n'est affichée.

1
Tom J Nowell

À partir de WordPress 3.5, les paramètres de méta méta requête support EXISTS et NOT EXISTS en tant qu’opérateurs de comparaison. Dans le cas où vous les utilisez, vous pouvez omettre la partie value de la méta requête. Essayez les arguments suivants pour votre requête:

$args = array(
   'post_type'  => 'post',
   'posts_per_page' => 6,
    'meta_query' => array(
        array(
         'key' => '_thumbnail_id',
         'compare' => 'EXISTS'
        ),
    )
);
21
helgatheviking