Si vous utilisez plusieurs requêtes WordPress pour afficher différents types de publications, vous risquez de rencontrer du contenu dupliqué. En effet, certaines publications peuvent correspondre à plus d’une boucle et apparaître deux fois.
WordPress n’a pas d’option intégrée pour éviter les publications en double dans plusieurs boucles. Cependant, au cours de nos 15 années d’expérience dans la gestion de différents sites WordPress, nous avons appris comment éviter ce problème. Nous avons donc créé un extrait de code personnalisé que vous pouvez ajouter à votre site pour éviter que des publications en double soient affichées dans différentes boucles.
Dans cet article, nous allons vous afficher comment éviter facilement l’affichage de publications en double avec plusieurs boucles dans WordPress.
Comment les publications Duplicator apparaissent dans plusieurs boucles WordPress
Lors de la création d’un thème WordPress personnalisé ou d’un modèle de page personnalisé, vous devrez parfois utiliser plusieurs boucles WordPress.
Par exemple, vous pouvez 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 pouvez également aider les lecteurs à trouver du contenu intéressant.
Dans tous ces exemples, une publication unique peut correspondre aux critères de plusieurs boucles. Dans ce cas, WordPress affiche un contenu en double.
Ce contenu dupliqué peut donner à votre site un aspect désordonné et non professionnel. Il occupe également de l’espace à l’écran sans apporter de valeur ajoutée.
Étant donné que vous générez dynamiquement des publications pour chaque boucle, vous ne pouvez pas prévoir manuellement si une publication dupliquée apparaîtra dans plusieurs boucles.
Ceci étant dit, voyons un moyen facile d’éviter les publications en double lorsqu’il s’agit de boucles multiples dans WordPress.
Éviter les publications Duplicator dans plusieurs boucles WordPress
Pour ce guide, nous allons vous montrer un exemple de code WordPress qui provoque l’erreur de publication en double et ensuite afficher un extrait de code qui corrige 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 terminé. Cependant, vous pouvez utiliser notre extrait de code comme point de départ, puis le modifier pour l’adapter à votre propre site.
Tout d’abord, créons un problème de doublons. Dans l’exemple de code suivant, nous affichons tous les articles de la catégorie « voyages » et tous les articles de la catégorie « actualités » sans éviter les doublons :
/****** 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 la présence de publications en double dans l’une ou l’autre requête.
Si une publication appartient à la fois à la catégorie « nouvelles » et à la catégorie « voyages », elle apparaîtra deux fois, comme vous pouvez le voir dans l’image suivante.
Corrigeons ce problème.
Afin d’éviter les publications en double sur votre blog WordPress, vous devrez stocker temporairement les données relatives à tous les articles affichés dans la première boucle.
Une fois que vous disposez de ces informations, vous pouvez modifier la deuxième requête pour empêcher les publications 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 ID de publication dans un tableau appelé $exclude
. Ensuite, nous ajoutons l’argument post__not_in
à la deuxième requête, ce qui exclura les publications qui ont été affichées dans la première boucle.
Si vous n’êtes pas familier avec l’ajout d’extraits de code sur votre site, un moyen plus facile est d’utiliser WPCode. C’est le meilleur plugin d’extraits de code pour WordPress qui vous permet d’ajouter du code personnalisé sans risquer de casser votre site.
Tout d’abord, vous devez installer et activer le plugin WPCode. Si vous avez besoin d’aide, consultez notre guide sur l’installation d’un plugin WordPress.
Après l’activation, vous pouvez aller dans Code Snippets + Add Snippet à partir du tableau de bord de WordPress et cliquer sur l’option « Add Your Custom Code (New Snippet) » (Ajouter votre code personnalisé (nouveau snippet)).
Ensuite, vous pouvez coller le code personnalisé dans la zone de prévisualisation du code et saisir un titre en haut.
Vous devez également sélectionner le « Type de code » comme PHP Snippet en cliquant sur le menu déroulant.
Après avoir saisi le code, il suffit de faire défiler la page pour sélectionner la section Insertion.
Ici, vous pouvez utiliser le paramètre par défaut « Insertion automatique » et laisser le plugin ajouter automatiquement le code à votre site.
Une fois que vous avez terminé, il vous suffit d’enregistrer l’extrait et de l’activer.
Pour plus de détails, veuillez consulter notre guide sur l ‘ajout de 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 des publications en double avec plusieurs boucles dans WordPress. Vous pouvez également consulter notre guide sur la façon de désactiver n’importe quel nombre de publications dans la boucle WordPress et sur la façon de rendre les publications épinglées dans WordPress.
Si vous avez aimé cet article, veuillez alors vous abonner à notre chaîne YouTube pour obtenir des tutoriels vidéo sur WordPress. Vous pouvez également nous trouver sur Twitter et Facebook.
Nick J
Is there a plugin that does this?
Satriyo
Could someone tell me how to do this? I’m really new to this and need a help, please give me a clear example with the post ID, how to store it? Let’s say, mine is 1527.
Gaurav
I’m running 2 loops before loops of a specific category in which I would like to avoid duplicates. So how do a store ID’s in the array from first two loops?
Joe
Just what I was looking for – thank you!
Guilherme Alves
Thank you soo much :))) This helps me alot!
Save my day <3
WPBeginner Support
Hi Guilherme,
You are welcome Don’t forget to follow us on Facebook for more WordPress tips and tutorials.
Administrateur
Julie
AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!!
Pirooz
This method just works fine until both of 2 loops located in one file.
but when I put the first loop in the header.php and another one in the index.php,
in_array($post->ID, $do_nit_duplicate) returns null.
what can I do?
warren
Good afternoon all,
will this work for my current issue with double display of posts on site? it literally displays a copy under the posts and the 1, 2, -> button…
the site is I have deactivated re-activated plugins i am literally going nuts.
agus
can you help me?
I have proble with duplicate category in my site
please
#thanks
WPBeginner Support
Seems like a theme specific issue, contact theme developers for support.
Administrateur
Gabriel
Before iterating over the default loop shouldn’t we use wp_reset_postdata(); ?
Greg
@sergeyvlasov – Thanks that worked for me
tho i changed
$do_nit_duplicate to $do_not_duplicate
Ron Hantman
Checkout this solution which does this task outside of the loop:
http://wordpress.stackexchange.com/questions/61936/removing-duplicate-values-between-two-wordpress-queries/
sergeyvlasov
I think there is a flaw in this algorithm. It can spot no more than 1(one) duplication. So the magic line would look like
$do_not_duplicate[] = $post->ID
and then used as
if(in_array($post->ID, $do_nit_duplicate)) continue;