web-dev-qa-db-fra.com

Interroger les posts collants avec des vignettes

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();
2
Nikita

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,

MODIFIER

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

LE CODE

$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,
));
2
Pieter Goosen

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();
0
Puni