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 :
|
1 2 3 4 5 |
<?php $my_query = new WP_Query($args); 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 --> <?php endwhile; ?> |
Et la vérification dans la seconde boucle, une fois que nous avons stocké toutes les ID dans le tableau $do_not_duplicate
|
1 2 3 4 |
<?php $my_second_query = new WP_Query(array( 'post__not_in' => $do_not_duplicate)); if (have_posts()) : while (have_posts()) : the_post(); <!-- Contenu de la boucle --> <?php endwhile; 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.
10 Responses to “Eviter du contenu dupliqué dans des boucles multiples”
Trackbacks/Pingbacks
- 5 astuces et bouts de code pour personnaliser WordPress | WordPress & Webdesign - [...] Eviter du contenu dupliqué dans des boucles multiples — Lorsqu’on utilise plusieurs boucles personnalisées dans un thème WordPress, il ...
- L’Hebdo WordPress : Barcamp – Mobile – WordPress 3.4 | WordPress Francophone - [...] de theloop.fr explique comment éviter du contenu dupliqué dans le cas où plusieurs boucles WordPress sont utilisées dans un ...
- WordPress Basics and Beyond Basics en version 0.3.2 | WordPress & Webdesign - [...] Tout d’abord, j’ai modifié la boucle principale en changeant la variable $do_not_duplicate afin de recevoir le tableau $do_not_duplicate[] au cas où il faudrait ...

Tu peux aussi utiliser un “posts__not_in” dans la requête (toujours avec un tableaux des ID déjà enregistrée). De cet façon le nombre d’article attendus restera juste.
En effet, c’est même beaucoup mieux, j’ai modifié la seconde boucle en conséquence
merci de m’avoir rappelé ça
J’ai modifié mes boucles WP en tenant compte de vos bonnes idées dans WordPress Basics. Ca fonctionne nickel, merci à vous
Ravi de pouvoir aider !
C’est peut-être stupide ce que je vais dire, mais pourquoi ne pas simplement utiliser wp_reset_query() après le endwhile pour remettre à zéro la prochaine boucle ?
http://codex.wordpress.org/Function_Reference/wp_reset_query
Je ne vois pas bien le rapport avec ce qui est proposé dans l’article je dois dire
excelent ce tuto! je suis pas un pro du codex wordpress mais là c’est très bien expliqué. Thanks!!
Bonjour
petite question par rapport à cet article,
si on a 4 boucles , que la première, la 2eme et la 3eme affiche un type d’article, et la quatrième, tous les articles saut ceux des 3 loops précédents.
est-ce qu’on doit appeler chaque boucle différemment comme $my_query1, $my_query2, $my_query3… et qu’en ets til pour la variable $do_not_duplicate ?
merci
Oui chaque variable qui va contenir l’appel à une nouvelle boucle doit avoir un nom différent, sinon ça donnera des résultats bizarres
Pour la variable $do_not_duplicate, le fonctionnement est le même, il suffit de la remplir dans chaque boucle, puis de l’utiliser dans la dernière.
super, merci !