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

12

Je souhaite interroger 6 publications, mais uniquement celles auxquelles une image sélectionnée est jointe. J'utilise la méthode meta_key avec WP_Query en tant que telle:

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

suivi de

<?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 sur ce que je me suis trompé ici?

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

.     
posée harryg 03.03.2013 - 19:52

2 réponses

2

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 publications auront toujours un jeu d'images en vedette, mais la pièce jointe à laquelle elles font référence sera invalide et toute tentative d'appel de the_post_thumbnail échouera. En utilisant votre code, vous n'obtenez que le titre du message, et aucune vignette. Cela donnerait l’impression que des publications sans 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 dites, 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 à cocher, vous obtiendrez des images indiquant qu'elles en ont une, mais aucune image ne s'affiche

.     
réponse donnée Tom J Nowell 04.03.2013 - 01:29
20

À partir de WordPress 3.5, les paramètres de méta-requête prennent en charge EXISTS et NOT EXISTS en tant qu'opérateurs de comparaison. Dans le cas où vous les utiliseriez, 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'
        ),
    )
);
    
réponse donnée helgatheviking 03.03.2013 - 20:59

Lire d'autres questions sur les étiquettes