Si vous utilisez plusieurs requêtes WordPress pour afficher différents ensembles de publications, vous pourriez rencontrer du contenu en double. C'est parce que certaines publications peuvent correspondre à plus d'une boucle et apparaître deux fois.
WordPress ne dispose pas d'une option intégrée pour éviter les publications en double dans plusieurs boucles. Cependant, au cours de nos plus de 15 ans d'expérience dans la gestion de différents sites WordPress, nous avons appris à éviter ce problème. Nous avons donc créé un extrait de code personnalisé que vous pouvez ajouter à votre site et éviter que des publications en double ne soient affichées dans différentes boucles.
Dans cet article, nous vous montrerons comment éviter facilement l'affichage de publications en double avec plusieurs boucles dans WordPress.

Comment les publications en double apparaissent dans plusieurs boucles WordPress
Lorsque vous créez un thème WordPress personnalisé ou un modèle de page personnalisé, vous pourriez parfois avoir besoin d'utiliser plusieurs boucles WordPress.
Par exemple, vous pourriez vouloir afficher vos publications récentes à côté des publications les plus populaires de votre site. En affichant toutes les publications de chaque catégorie, vous pourriez également aider les lecteurs à trouver du contenu intéressant.
Dans tous ces exemples, une seule publication peut correspondre aux critères de plusieurs boucles. Lorsque cela se produit, WordPress affichera du contenu en double.
Ce contenu en double peut rendre votre site désordonné et non professionnel. Il occupe également de l'espace à l'écran sans ajouter de valeur.
Comme vous générez dynamiquement des articles pour chaque boucle, vous ne pouvez pas prédire manuellement si un article en double apparaîtra dans plusieurs boucles.
Cela étant dit, examinons un moyen simple d'éviter les articles en double lorsque vous traitez plusieurs boucles dans WordPress.
Éviter les articles en double dans plusieurs boucles WordPress
Pour ce guide, nous vous montrerons un exemple de code WordPress qui provoque l'erreur d'article en double, puis nous partagerons un extrait de code qui résout le problème.
Lors de la création d'un thème enfant WordPress ou d'un modèle personnalisé, votre code peut être complètement différent. Cependant, vous pouvez utiliser notre extrait de code comme point de départ, puis le modifier pour qu'il corresponde à votre propre site Web.
Tout d'abord, créons un problème d'article en double. Dans le code d'exemple suivant, nous affichons tous les articles de la catégorie 'voyage' et tous les articles de la catégorie 'actualités' sans éviter les articles en double :
/****** The First Query *******/
$first_query = new WP_Query( array (
'category_name' => 'news',
'posts_per_page' => 3
));
// The Loop
if ( $first_query->have_posts() ) {
echo '<ul>';
while ( $first_query->have_posts() ) {
$first_query->the_post();
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title();
echo '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
/****** The Second Query *******/
$second_query = new WP_Query( array (
'category_name' => 'travel',
'posts_per_page' => 3
) );
// The Loop
if ( $second_query->have_posts() ) {
echo '<ul>';
while ( $second_query->have_posts() ) {
$second_query->the_post();
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title();
echo '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>
Comme vous pouvez le constater, ce code ne vérifie pas les articles en double dans l'une requête.
Si un article appartient aux deux catégories 'actualités' et 'voyage', il apparaîtra deux fois, comme vous pouvez le voir dans l'image suivante.

Corrigeons ce problème.
Afin d'éviter les articles en double sur votre blog WordPress, vous devrez stocker temporairement les données de tous les articles affichés dans la première boucle.
Une fois que vous avez ces informations, vous pouvez modifier la deuxième requête pour empêcher les articles en double d'apparaître dans la deuxième boucle :
/****** The First Query *******/
$first_query = new WP_Query( array (
'category_name' => 'news',
'posts_per_page' => 3
) );
// The Loop
if ( $first_query->have_posts() ) {
echo '<ul>';
while ( $first_query->have_posts() ) {
$first_query->the_post();
// Store Post IDs in an Array to reuse later
$exclude[] = $post->ID;
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title();
echo '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
/****** The Second Query *******/
$second_query = new WP_Query( array (
'category_name' => 'travel',
'post__not_in' => $exclude, // Tell WordPress to Exclude these posts
'posts_per_page' => 3
) );
// The Loop
if ( $second_query->have_posts() ) {
echo '<ul>';
while ( $second_query->have_posts() ) {
$second_query->the_post();
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title();
echo '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>
Dans le code ci-dessus, nous stockons les identifiants d'article dans un tableau appelé $exclude. Après cela, nous ajoutons l'argument post__not_in à la deuxième requête, qui exclura les articles qui ont été affichés dans la première boucle.
Si vous n'êtes pas familier avec l'ajout de snippets de code à votre site, une méthode plus simple consiste à utiliser WPCode. C'est le meilleur plugin de snippets de code pour WordPress qui vous aide à ajouter du code personnalisé sans risquer de casser votre site.
Tout d'abord, vous devrez installer et activer le plugin WPCode. Si vous avez besoin d'aide, consultez notre guide sur comment installer un plugin WordPress.
Après activation, vous pouvez aller dans Code Snippets + Ajouter un snippet depuis le tableau de bord WordPress, puis cliquer sur l'option « Ajouter votre code personnalisé (Nouveau snippet) ».

Après cela, vous pouvez coller le code personnalisé dans la zone de prévisualisation du code et entrer un titre en haut.
Vous devrez également sélectionner le « Type de code » comme Snippet PHP en cliquant sur le menu déroulant.

Après avoir entré le code, faites simplement défiler vers le bas pour sélectionner la section Insertion.
Ici, vous pouvez utiliser le réglage par défaut « Insertion automatique » et laisser le plugin ajouter automatiquement le code à votre site.

Une fois que vous avez terminé, enregistrez simplement le snippet et activez-le.
Pour plus de détails, consultez notre guide sur comment ajouter du code personnalisé dans WordPress.
Maintenant, si vous visitez votre site WordPress, vous verrez que les publications en double ont disparu.

Nous espérons que cet article vous a aidé à apprendre comment éviter l'affichage de publications en double avec plusieurs boucles dans WordPress. Vous voudrez peut-être aussi consulter notre guide sur comment désactiver n'importe quel nombre d'articles dans une boucle WordPress et comment rendre les publications importantes dans WordPress.
Si cet article vous a plu, abonnez-vous à notre chaîne YouTube pour des tutoriels vidéo WordPress. Vous pouvez également nous retrouver sur Twitter et Facebook.

Nick J
Existe-t-il un plugin qui fait cela ?
Satriyo
Quelqu'un pourrait-il me dire comment faire ? Je suis vraiment nouveau dans ce domaine et j'ai besoin d'aide, s'il vous plaît, donnez-moi un exemple clair avec l'ID de la publication, comment la stocker ? Disons que la mienne est 1527.
Gaurav
J'exécute 2 boucles avant les boucles d'une catégorie spécifique dans laquelle je voudrais éviter les doublons. Alors, comment stocker les ID dans le tableau des deux premières boucles ?
Joe
Exactement ce que je cherchais – merci !
Guilherme Alves
Merci beaucoup :))) Ça m'aide énormément !
Vous me sauvez la vie <3
Support WPBeginner
Salut Guilherme,
You are welcome
Don’t forget to follow us on Facebook for more WordPress tips and tutorials.
Admin
Julie
AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!!
Pirooz
Cette méthode fonctionne bien tant que les deux boucles sont situées dans le même fichier.
Mais lorsque je place la première boucle dans le header.php et une autre dans le index.php,
in_array($post->ID, $do_nit_duplicate) renvoie null.
Que puis-je faire ?
warren
Bon après-midi à tous,
est-ce que cela fonctionnera pour mon problème actuel d'affichage double des publications sur le site ? il affiche littéralement une copie sous les publications et le bouton 1, 2, ->
le site est J'ai désactivé réactivé les plugins je deviens littéralement fou.
agus
pouvez-vous m'aider ?
J'ai un problème avec des catégories en double sur mon site
s'il vous plaît
#merci
Support WPBeginner
Il semble s'agir d'un problème spécifique au thème, contactez les développeurs du thème pour obtenir de l'aide.
Admin
Gabriel
Avant d'itérer sur la boucle par défaut, ne devrions-nous pas utiliser wp_reset_postdata(); ?
Greg
@sergeyvlasov – Merci, cela a fonctionné pour moi
bien que j'aie changé
$do_nit_duplicate en $do_not_duplicate
Ron Hantman
Découvrez cette solution qui effectue cette tâche en dehors de la boucle :
http://wordpress.stackexchange.com/questions/61936/removing-duplicate-values-between-two-wordpress-queries/
sergeyvlasov
Je pense qu'il y a un défaut dans cet algorithme. Il ne peut repérer qu'une (1) duplication. Donc la ligne magique ressemblerait à
$do_not_duplicate[] = $post->ID
et ensuite utilisée comme
if(in_array($post->ID, $do_nit_duplicate)) continue;