Je dois afficher au maximum 5 derniers messages collants comportant une vignette. Et j'ai besoin d'avoir un décompte précis des messages affichés. J'ai essayé d'exclure les posts collants sans une vignette avec meta_query, mais sans succès.
$sticky = get_option('sticky_posts');
if (empty($sticky)) {
return;
}
$counter = 1;
$r = new WP_Query(array(
'posts_per_page' => 5,
'post__in' => $sticky,
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => 'EXISTS',
),
),
'post_status' => 'publish',
'orderby' => 'post__in',
'post_type' => array( 'post' ),
));
if ($r->have_posts()) :
echo '<section class="header-sticky-posts '.$post_count.'">';
while ( $r->have_posts() ) : $r->the_post();
echo '<div class="header-sticky-post">';
// Post content
echo '</div>';
$counter++;
endwhile;
echo '</section>';
endif;
wp_reset_postdata();
Vous devez définir ignore_sticky_posts
sur true
dans vos arguments de requête. De cette façon, vous excluez les posts collants et vous concentrez uniquement sur le tableau de l'ID de message transmis à post_in
'ignore_sticky_posts' => true,
Si cela n’a pas beaucoup de sens, veuillez consulter ma réponse ici à une question similaire dans laquelle je l’ai expliqué un peu mieux. Assurez-vous de vérifier
$r = new WP_Query(array(
'posts_per_page' => 5,
'post__in' => $sticky,
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => 'EXISTS',
),
),
'post_status' => 'publish',
'orderby' => 'post__in',
'post_type' => array( 'post' ),
'ignore_sticky_posts' => true,
));
Ce que vous faites est juste, sauf que vous faites preuve de négligence ou que vous venez de copier du code ailleurs et que vous le collez sans le modifier.
<?php
$sticky = get_option('sticky_posts');
if (empty($sticky)) {
return;
}
$counter = 1;
$posts = new WP_Query(array(
'posts_per_page' => 5,
'post__in' => $sticky,
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => 'EXISTS',
),
),
'post_status' => 'publish',
'orderby' => 'post__in',
'post_type' => array( 'post' ),
));
if ($posts->have_posts()) :
while ( $posts->have_posts() ) : $posts->the_post();
if ( has_post_thumbnail() ) :
echo '<section class="header-sticky-posts'.$counter.'">';
echo '<div class="header-sticky-post">';
the_post_thumbnail();
echo '</div>';
echo '</section>';
$counter++;
endif;
endwhile;
endif;
wp_reset_postdata();