I post correlati sono un elenco di articoli che trattano lo stesso argomento del post che stiamo leggendo.
In questo post mostreremo un esempio di come visualizzare i post correlati per tag.
Questo il codice completo:
<?php global $post; $posttags = wp_get_post_tags($post->ID); if ($posttags) { $tags = array(); $blacklist = array('blacklist'); foreach ($posttags as $t) { if(!in_array(strtolower($t->name),$blacklist)) { $tags[] = str_replace(' ','-',$t->name); } } $ts = implode(",", $tags); $args = array( 'numberposts' => 3, 'tag'=> $ts, 'exclude' => $post->ID, 'orderby' => 'post_date', 'order' => 'desc' ); $related = get_posts($args); ?> <?php if ($related) { ?> <?php // Salviamo $post in una variabile temporanea ?> <?php $post_TEMP = $post; ?> <ul> <li>Articoli correlati<li> <?php foreach ($related as $post) { ?> <?php setup_postdata($post); ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php } ?> </ul> <?php // Resettiamo la variabile $post $post = $post_TEMP; setup_postdata($post); } } ?>
Analizziamo il codice:
global $post; $posttags = wp_get_post_tags($post->ID);
Prima di tutto rendiamo globale la variabile $post per rendere disponibili i dati del post, mentre con la funzione wp_get_post_tags() recuperiamo i tag associati al post.
$tags = array(); $blacklist = array('blacklist'); foreach ($posttags as $t) { if(!in_array(strtolower($t->name),$blacklist)){ $tags[] = str_replace(' ','-',$t->name); } }
Verificato che ci sono tag associati al post, possiamo impostare un controllo per escludere dei tag specifici dal filtro per correlare i post. Per impostare i tag da escludere, aggiungere i termini desiderati nell’array $blacklist. Inoltre, nel ciclo dove si filtrano i tag da eslcudere, con la funzione str_replace() convertiamo i gli spazi bianchi dei tag contenenti più parole, in modo da avere lo slug del tag.
$ts = implode(",", $tags);
Creiamo una variabile $ts formattando i tag per la query,
$args = array( 'numberposts' => 3, 'tag'=> $ts, 'exclude' => $post->ID, 'orderby' => 'post_date', 'order' => 'desc' ); $related = get_posts($args);
Creiamo una array per impostare i parametri della query e con la funzione get_posts() i post correlati. In questo esempio i post visualizzati sono 3, ma basta cambiare il valore di numberposts per visualizzare più o meno post correlati.
// Salviamo $post in una variabile temporanea $post_TEMP = $post;
Verificato che ci siano post correlati, salviamo la variabile $post in una variabile temporanea, in modo da usare le funzioni native di Wordpress per visualizzare le informazioni dei post correlati.
<ul> <li><h3 class="georgia italic fsize-24">Articoli correlati</h3><li> <?php foreach ($related as $post) { ?> <?php setup_postdata($post); ?> <li class="post-related georgia italic"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a> </li> <?php } ?> </ul>
Questo è il codice che stampa a video l’elenco dei post correlati. In questo esempio, visualizziamo solo il titolo dei post correlati, ma basta richiamare le funzioni di Wordpress per visualizzare le informazioni dei singoli post (es. the_author()).
// Reset $post $post = $post_TEMP; setup_postdata($post);
Infine resettiamo la variabile $post e il gioco è fatto.
Note: Puoi vedere il codice funzionante, alla fine di questo post.





