Italian (Italiano) translation by Cristiano Verondini (you can also view the original English article)
Quando si gestisce un blog di dimensioni considerevoli è necessario trovare un modo per aiutare il lettore a trovare i contenuti che desidera leggere magari basandosi su quello che stanno leggendo o che hanno letto in passato.
Un modo per risolvere questo problema è quello di usare uno dei tanti plugin in grado di identificare Post fra loro correlati. Questi plugin usano diverse metodologie per identificare altri Post che abbiano contenuto simile a quello correntemente visualizzato. Purtroppo non sempre ottengono il risultato desiderato.
Uno dei modi più immediati per identificare Post correlati è quello di usare le categorie, i tag o i termini della tassonomia. Una volta identificati i Post che appartengono alla stessa categoria di quello visualizzato sarà poi possibile mostrare un elenco di quelli più recenti cosicché il lettore possa facilmente trovare dei contenuti collegati.
In questo tutorial mostrerò come sia possibile creare un plugin che faccia esattamente questo. Questo plugin fornirà una funzione che sarà possibile aggiungere al documento template single.php
in modo da mostrare l'elenco al di sotto del contenuto del Post.
Che cosa serve
Per seguire questo tutorial è necessario avere:
- un'installazione di sviluppo di WordPress
- un tema già esistente che abbia un documento template
single.php
- un editor di testo
Impostazione del Plugin
Dapprima impostiamo il plugin. È necessario creare un nuovo documento per il plugin. Chiamerò il mio tutsplus-related-posts.php
.
In questo nuovo documento aggiungiamo il seguente testo:
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: Tuts+ Related Posts
|
4 |
* Plugin URI: https://code.tutsplus.com/tutorials/creating-a-list-of-posts-with-the-same-categories-as-the-current-one--cms-22626
|
5 |
* Description: This plugin identifies what categories the current post is in and outputs a list of the most recent posts in the same categories.
|
6 |
* Version: 1.0.0
|
7 |
* Author: Rachel McCollin
|
8 |
* Author URI: http://rachelmccollin.com
|
9 |
* License: GPL-3.0+
|
10 |
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
11 |
* Domain Path: /lang
|
12 |
* Text Domain: tutsplus
|
13 |
*/
|
È naturalmente possibile cambiare i dettagli relativi all'autore, ma il testo che abbiamo appena inserito sotto forma di commento è necessario affinché WordPress riconosca il plugin e renda possibile la sua attivazione nella dashboard.
Identificazione delle categorie del Post corrente
Per poter identificare altri Post appartenenti alla stessa categoria è necessario accedere all'elenco delle categorie cui appartiene il Post corrente ed aggiungerle ad un array.
Iniziamo creando la funzione che conterrà il codice ed alcune inizializzazioni:
1 |
function tutsplus_related_posts() { |
2 |
|
3 |
$post_id = get_the_ID(); |
4 |
$cat_ids = array(); |
5 |
|
6 |
}
|
Adesso, all'interno della funzione, usiamo la funzione get_the_category()
per ottenere un array di dati che rappresentano le categorie cui il Post appartiene:
1 |
$categories = get_the_category( $post_id ); |
Come si può vedere la funzione accetta un unico parametro che è l'identificativo del Post (post id) di cui si vogliono ottenere le informazioni.
A questo punto creiamo un array che contenga gli id di tutte le categorie trovate:
1 |
if ( $categories && ! is_wp_error( $categories ) ) { |
2 |
|
3 |
foreach ( $categories as $category ) { |
4 |
|
5 |
array_push( $cat_ids, $category->term_id ); |
6 |
|
7 |
}
|
8 |
|
9 |
}
|
Vediamo in dettaglio quali operazioni svolge questo codice:
- dapprima controlla che il valore
$categories
restituito dalla funzione non valga null o contenga degli errori - poi, per ogni categoria, aggiunge il suo identificativo (id) all'array
La funzione che stiamo scrivendo sarà quindi diventata:
1 |
function tutsplus_related_posts() { |
2 |
|
3 |
$post_id = get_the_ID(); |
4 |
$cat_ids = array(); |
5 |
$categories = get_the_category( $post_id ); |
6 |
|
7 |
if ( $categories && !is_wp_error( $categories ) ) { |
8 |
|
9 |
foreach ( $categories as $category ) { |
10 |
|
11 |
array_push( $cat_ids, $category->term_id ); |
12 |
|
13 |
}
|
14 |
|
15 |
}
|
16 |
|
17 |
}
|
Scrivere una Query che restituisca i Post appartenenti ad un insieme di categorie
Adesso che abbiamo un array che contiene un elenco di identificativi di categoria possiamo usarlo come argomento per una Query che identifichi quali sono i Post associati a queste categorie.
Sempre all'interno della funzione impostiamo quindi gli argomenti da passare alla funzione che effettuerà la Query:
1 |
$current_post_type = get_post_type( $post_id ); |
2 |
|
3 |
$args = array( |
4 |
'category__in' => $cat_ids, |
5 |
'post_type' => $current_post_type, |
6 |
'posts_per_page' => '5', |
7 |
'post__not_in' => array( $post_id ) |
8 |
);
|
Gli argomenti così specificati richiedono alla funzione di trovare i Post che siano dello stesso tipo di quello corrente, appartengano alle stesse categorie e, naturalmente, escludano il post stesso. Ho inoltre specificato di restituire al massimo cinque Post. È comunque possibile cambiare il valore di questi parametri qualora si voglia, ad esempio, modificare il numero di Post restituiti oppure cambiare il tipo dei Post.
A questo punto è necessario eseguire la Query:
1 |
$query = new WP_Query( $args ); |
2 |
|
3 |
if ( $query->have_posts() ) { |
4 |
|
5 |
?>
|
6 |
<aside class="related-posts"> |
7 |
<h3>
|
8 |
<?php _e( 'Related Posts', 'tutsplus' ); ?> |
9 |
</h3>
|
10 |
<ul class="related-posts"> |
11 |
<?php
|
12 |
|
13 |
while ( $query->have_posts() ) { |
14 |
|
15 |
$query->the_post(); |
16 |
|
17 |
?>
|
18 |
<li>
|
19 |
<a href="<?php the_permalink(); ?>"> |
20 |
<?php the_title(); ?> |
21 |
</a>
|
22 |
</li>
|
23 |
<?php
|
24 |
|
25 |
}
|
26 |
|
27 |
?>
|
28 |
</ul>
|
29 |
</aside>
|
30 |
<?php
|
31 |
|
32 |
}
|
33 |
|
34 |
wp_reset_postdata(); |
Questo codice produce un elenco dei Post così ottenuti dove il titolo è inserito all'interno di un link al Post stesso.
Aggiungere la funzione ad un tema
L'ultima cosa da fare è aggiungere l'invocazione alla funzione che abbiamo appena scritto all'interno di un documento template del tema che stiamo usando. Nel mio caso ho creato un tema derivato da Twenty Fourteen, con un nuovo documento single.php
. Sarà proprio qui che inserirò l'invocazione alla funzione. Tale invocazione può essere inserita in qualsiasi punto a patto che si trovi all'interno del ciclo usato da WordPress per visualizzare i Post.
Aggiungiamo quindi:
1 |
tutsplus_related_posts(); |
Il risultato ottenuto è quello che vediamo qui sotto:



Nota: il sito di dimostrazione può apparire un po' confuso poiché i tag e le categorie sono elencate alla fine di ogni post. L'elenco che abbiamo creato non usa i tag ma solamente le categorie poiché ogni Post in questo sito ha almeno una categoria associata.
Alternative: tag e termini di tassonomia
È possibile modificare facilmente la funzione appena creata in modo che possa estrarre l'elenco di Post basandosi sui tag o sui termini di tassonomia.
Per identificare i tag invece che le categorie sarà necessario sostituire l'invocazione della funzione get_the_category()
con get_the_tags()
e modificare il parametro 'category__in'
nell'invocazione della funzione con 'tag__in'
.
Se infine desiderassimo identificare i termini di tassonomia useremmo get_the_terms()
al posto di get_the_category()
, aggiungendo lo slug di tassonomia come secondo parametro. Dovremo quindi sostituire il parametro 'category__in'
con 'tax_query'
nell'invocazione della Query.
È possibile inoltre cercare Post che abbiano gli stessi termini in più di una tassonomia (includendo termini e categorie) usando due array ed usando due argomenti nell'invocazione della Query.
In conclusione
In questo tutorial ho mostrato come identificare quali sono le categorie alle quali appartiene il Post visualizzato, come aggiungere il loro identificativo ad un array e come creare una Query per visualizzare un elenco di altri Post che appartengano alle stesse categorie. Creando una funzione in questo modo è possibile avere un maggior controllo rispetto a quello che si otterrebbe usando dei plugin generici soprattutto avendo la possibilità di costruire la Query esattamente secondo le nostre necessità e mostrando i risultati ottenuti esattamente come vogliamo.
La tecnica qui mostrata può ovviamente essere adattata per lavorare con tag, termini di tassonomia o una combinazione di questi.