Sviluppando un tema per WordPress da zero ci si ritrova in molte situazioni a dover gestire loop multipli. In questi casi, oltre a dover porre attenzione a “resettare” i loop (usando funzioni come wp_reset_postdata() o wp_reset_query()), può sorgere la necessità di evitare che lo stesso post/contenuto venga replicato all’interno dei 2 loops in considerazione.
Prendiamo ad esempio la classica homepage di un blog. In alto abbiamo uno slider con i primi 3 articoli e sotto un listato di tutti gli altri. Come potremmo fare per evitare che vi siano dei doppioni nei due loop?

Evitiamo i duplicati con un trick

Il semplice trucco per evitare che i post vengano duplicati tra i loops è quello di memorizzare l’ID del post in questione all’interno del primo loop e verificarne l’esistenza (e quindi determinarne l’esclusione) nel loop successivo:

< ?php $my_query = new WP_Query('category_name=evidenza&posts_per_page=1');
  while ($my_query->have_posts()) : $my_query->the_post();
  $non_duplicare = $post->ID; //Questo è il trick
?>
<!-- Fai le tue azioni dentro al loop -->
< ?php endwhile; ?>

Ora che l’ID è memorizzato nella variabile $non_duplicare, aggiungiamo un controllo nel secondo loop. Scriveremo qualcosa di simile a ciò:

< ?php if (have_posts()) : while (have_posts()) : the_post();
if( $post->ID == $non_duplicare ) continue; //Questo è il trick
?>
<!-- Fai le tue azioni dentro al loop -->
< ?php endwhile; endif; ?>

Se l’ID del post corrisponde a quello memorizzato allora non considerarlo e vai avanti nell’estrazione degli altri post.
Tutto molto semplice no?