Wordpress: eliminare i post duplicati nei loop multipli

giovedì 2 luglio, 2009

L'utilissima funzione query_posts() o l'oggetto WP_Query (che poi sono fondamentalmente la stessa cosa) di Wordpress permette di ottenere una lista di post impostando numerosi parametri di ricerca (vedi Very short snippet: visualizzare una lista di post per categoria o tag). Proprio a causa della sua versatilità nella ricerca dei post può capitare che usando la funzione due o più volte di seguito si ottengano dei "duplicati". Questo può accadere, ad esempio, quando si cerca (filtra) per TAG; un post, infatti, può (anzi ha, nella maggioranza dei casi) avere associati più tag. Ne deriva che la lista dei post con TAG A può presentare un post presente anche nella lista dei post con TAG B.

Per eliminare il problema si può procedere in due modi diversi, in base alla versione di Wordpress. Il primo consiste nel mettere da parte tutti gli ID del primo loop così da escluderli nel secondo. Questa tecnica può essere utilizzata per qualsiasi numero di loop e al il vantaggio di essere compatibile anche con le vecchie versioni di Wordpress:

PHP:
  1. // Primo loop
  2. // L'array $ids[] usato sotto serve a tenere traccia degli
  3. // id dei post che sono uscito con il primo loop
  4. $ids = array();
  5. query_posts('category_name=Flash&showposts=10');
  6. while (have_posts()) : the_post();
  7.     $ids[] = $post->ID;
  8.     // ... output
  9. endwhile;
  10.  
  11. // Secondo loop
  12. // In questo caso l'output avviene solo nel cosa che
  13. // $post->ID non sia presente nell'array $ids[]
  14. query_posts('category_name=Adobe&showposts=10');
  15. while (have_posts()) : the_post();
  16.     if (!in_array($post->ID, $ids)) {
  17.         // ... output
  18.    }
  19. endwhile;

Se la release di Wordpress che stiamo usando è la 2.6 o superiore, possiamo applicare una comodoa variante al secondo loop:

PHP:
  1. // Secondo loop
  2. // Wordpress 2.6+
  3. // In questo caso è direttamente la query_posts() ad
  4. // escludere gli ID dei post già visualizzati
  5. query_posts(
  6.     array('showposts' => 10,
  7.           'cat' => 4,
  8.           'post__not_in' => $ids,
  9.           ));
  10. while (have_posts()) : the_post();
  11.     // ... output
  12. endwhile;

L'opzione post__not_in insieme ad altre è ben documentata qui.

Post correlati

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

3 commenti a: “Wordpress: eliminare i post duplicati nei loop multipli”

  1. 02 lug, 2009 Undolog.com» Wordpress: eliminare i post duplicati nei loop multipli:

    [...] articolo originale: Undolog.com» Wordpress: eliminare i post duplicati nei loop multipli Articoli correlati: Undolog.com» Very short snippet: Wordpress, prossimamente sul [...]

  2. 04 lug, 2009 Wordpress: eliminare i post duplicati nei loop multipli:

    [...] fonte: Wordpress: eliminare i post duplicati nei loop multipli Articoli correlati: Undolog.com» Wordpress: eliminare i post duplicati nei loop [...]

  3. 04 lug, 2009 Il meglio della settimana #24 | BigThink:

    [...] Wordpress: eliminare i post duplicati nei loop multipli Un piccolo trucchetto per evitare di ripetere i post, quando abbiamo due loop nella stessa pagina. [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre>         // blocco generico
[code][/code]       // blocco generico
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL