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?
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();