Eviter du contenu dupliqué dans des boucles multiples

Cet article s’adresse plutôt aux développeurs de thèmes WordPress, même si le code en lui-même est assez simple. Parfois, lors de la création d’un thème, on peut vouloir utiliser plusieurs boucles différentes, notamment en page d’accueil. Un exemple simple : une boucle avec les articles récents, une boucle avec des articles au hasard.

Afin d’éviter qu’un (ou plusieurs) article, ou un contenu personnalisé quelconque, se retrouve dans les deux affichages de ces boucles en même temps, il suffit de quelques lignes de code.

L’astuce pour éviter cet inconvénient est de simplement stocker dans un tableau les ID des contenus affichés dans la première boucle, puis vérifier lors de la création de la seconde boucle que les contenus que l’on récupère ne se trouvent pas dans ce tableau. Un peu de code valant mieux qu’un long discours, voyons tout de suite comment faire :

<?php $my_query = new WP_Query($args);
if ( $my_query->have_posts() ) :
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate[] = $post->ID; // On stocke les ID des contenus de la boucle dans ce tableau
// Contenu de la boucle
endwhile;
wp_reset_postdata();
endif; ?>

Et la vérification dans la seconde boucle, une fois que nous avons stocké toutes les ID dans le tableau $do_not_duplicate

<?php $my_second_query = new WP_Query(array( 'post__not_in' => $do_not_duplicate));
if ($my_second_query->have_posts()) : while (have_posts()) : $my_second_query->the_post();
// Contenu de la boucle
endwhile;
wp_reset_postdata();
endif; ?>

L’instruction continue en PHP permet de ne pas prendre en compte l’itération courante et de passer directement à la suivante dans une boucle.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.