Advertisement
  1. Code
  2. WordPress

Creare un elenco di Post che appartengano alla stessa categoria del Post corrente

Scroll to top
Read Time: 6 min

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:

End of a post with a list of five related posts shown at the bottomEnd of a post with a list of five related posts shown at the bottomEnd of a post with a list of five related posts shown at the bottom

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.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.