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?