web-dev-qa-db-fra.com

Exclure les 2 premiers posts avec meta_key de la boucle

J'ai 2 boucles sur une page. Le premier affichant 2 articles en vedette:

<?php
$args = array(
    'posts_per_page' => '2',
    'meta_query' => array(
        array(
            'key' => 'featured_post',
            'value' => '1',
            'compare' => 'LIKE'
        )
    )
);
query_posts($args);
?>

La seconde affiche tous les posts:

<?php wp_reset_query(); ?>
                <?php if (have_posts()) : ?>
                    <?php while (have_posts()) : the_post(); ?>

                <div class="meta">DO STUFF</div>

                    <?php endwhile; ?>
                <?php endif; ?>

Comment puis-je exclure les 2 premiers éléments "vedette_post" de la deuxième boucle?

2
Phil

Le premier point est que vous ne devez PAS utiliser query_posts() pour les requêtes personnalisées. La meilleure approche consiste à utiliser la classe WP_Query. Plus d'infos dans le WP docs et ici .

Cet exemple affiche vos 2 articles en vedette, puis les exclut dans la deuxième requête.

// We will Push the ID of your featured posts to this array
$excl_posts[] = '';

// Query arguments from your featured posts query
$feat_args = array(
    'posts_per_page' => '2',
    'meta_query' => array(
        array(
            'key' => 'featured_post',
            'value' => '1',
            'compare' => 'LIKE'
        )
    )
);

// Instantiate new WP_Query instead of using query_posts()
$featured = new WP_Query( $feat_args );

if ( $featured->have_posts() ):
  while ( $featured->have_posts() ):
    $featured->the_post();

    // Do stuff with each posts
    echo get_the_title() . "<br>";

    // Push current postID onto the exclude array
    $excl_posts[] = get_the_ID();
  endwhile;
endif;

wp_reset_postdata();

$excl_feat_args = array(
    'posts_per_page' => '10',
    'post__not_in' => $excl_posts,
    'meta_query' => array(
        array(
            'key' => 'featured_post',
            'value' => '1',
            'compare' => 'LIKE'
        )
    )
);
$excl_featured = new WP_Query( $excl_feat_args );

if ( $excl_featured->have_posts() ):
  while ( $excl_featured->have_posts() ):
    $excl_featured->the_post();
    echo get_the_title() . "<br>";
  endwhile;
endif;

wp_reset_postdata();
1
jdm2112