Creazione di un elenco di post con le stesse categorie di quello corrente

Se stai gestendo un blog di grandi dimensioni, dovrai trovare un modo per aiutare i tuoi lettori a trovare contenuti che vorranno leggere, in base a ciò che stanno leggendo o che hanno appena letto.

Un modo per farlo è utilizzando uno dei tanti plug-in che identificano i post correlati. Questi usano vari metodi per identificare altri post che hanno contenuti simili a quelli attuali, ma a volte non ti danno abbastanza risultati.

Un modo logico per identificare post come quello attualmente in mostra è utilizzando categorie, tag o termini di tassonomia. Se è possibile identificare i post nelle stesse categorie di quello corrente, è possibile visualizzare un elenco dei post più recenti nelle stesse categorie, per aiutare i lettori a trovare i contenuti correlati.

In questo tutorial ti mostrerò come creare un plugin per fare proprio questo. Il plugin ti darà una funzione che tu aggiungerai al tuo single.php file modello per mostrare l'elenco sotto il contenuto del post corrente.

Cosa ti serve

Per seguire questo tutorial avrai bisogno di:

  • un'installazione di sviluppo di WordPress
  • un tema esistente con a single.php file di modello
  • un editor di codice

Impostazione del plugin

Iniziamo impostando il plugin. Crea un nuovo file per il tuo plugin: sto chiamando il mio tutsplus legati-posts.php.

Nel tuo nuovo file, aggiungi quanto segue:

Ti consigliamo di cambiare i dettagli dell'autore con i tuoi dettagli, ma questo dà a WordPress ciò di cui ha bisogno per riconoscere il plugin e ti permette di attivarlo nella dashboard.

Identificazione delle categorie del post corrente

Per identificare altri post con le stesse categorie, è necessario ottenere l'elenco delle categorie in cui è presente il post corrente e aggiungerle a un array.

Inizia creando la funzione per contenere il codice e alcune inizializzazioni:

function tutsplus_related_posts () $ post_id = get_the_ID (); $ cat_ids = array (); 

Ora all'interno della tua funzione, usa il get_the_category () funzione per recuperare una matrice di dati relativi alle categorie in cui si trova il post corrente:

$ categories = get_the_category ($ post_id);

La funzione ha solo un parametro, l'id post, che specifica che è il post corrente di cui si desidera ottenere le categorie.

Successivamente, è necessario creare un array che contenga gli ID di tutte le categorie:

if ($ categories &&! is_wp_error ($ categories)) foreach ($ categories as $ category) array_push ($ cat_ids, $ category-> term_id); 

Diamo un'occhiata a cosa fa questo codice:

  • Prima controlla che $ categorie non ha restituito null o un errore.
  • Quindi, per ogni categoria, aggiunge l'ID all'array.

La tua funzione sarà ora simile a questa:

function tutsplus_related_posts () $ post_id = get_the_ID (); $ cat_ids = array (); $ categories = get_the_category ($ post_id); if ($ categories &&! is_wp_error ($ categories)) foreach ($ categories as $ category) array_push ($ cat_ids, $ category-> term_id); 

Scrivere una query sui messaggi di output nella stessa categoria

Ora che hai un array con gli ID di categoria al suo interno, puoi usarlo come argomento per una query per identificare i post con tali categorie.

Sempre all'interno della tua funzione, imposta gli argomenti per la query:

$ current_post_type = get_post_type ($ post_id); $ args = array ('category__in' => $ cat_ids, 'post_type' => $ current_post_type, 'posts_per_page' => '5', 'post__not_in' => array ($ post_id));

Questi argomenti troveranno i post degli stessi tipi di post di quello corrente, nelle stesse categorie, ed escludono il post corrente. L'ho impostato per generare cinque post, ma puoi sempre modificare questo o altri argomenti come il tipo di post se hai applicato categorie a più di un tipo di post.

Ora esegui la query:

$ query = new WP_Query ($ args); if ($ query-> have_posts ()) ?>  

In questo modo i titoli dei post vengono visualizzati all'interno di collegamenti a essi, in un elenco. 

Aggiunta della funzione al tema

Il passaggio finale consiste nell'aggiungere la funzione a un file di modello nel tema. Ho creato un tema figlio per il tema Twenty Fourteen con un nuovo single.php file, e sto aggiungendo la funzione lì, sotto il contenuto. Può essere aggiunto ovunque, purché all'interno del ciclo di post di WordPress.

Nel tuo file modello, aggiungi quanto segue:

tutsplus_related_posts ();

Puoi vedere il risultato qui sotto:

Nota: il sito demo è un po 'confuso poiché i tag e le categorie sono elencati alla fine di ogni post. Il nostro elenco non utilizza tag, solo categorie, di cui ogni post in questo sito ha uno.

Alternative: tag e termini di tassonomia

Puoi tranquillamente modificare questa funzione per lavorare con tag o termini di tassonomia.

Per identificare i tag anziché le categorie, sostituirai il get_the_category () funzione con get_the_tags (), e quindi sostituire il 'Category__in' argomento per la query con 'Tag__in'.

Per identificare i termini della tassonomia, useresti get_the_terms () al posto di get_the_category (), aggiungendo lo slug della tassonomia come secondo parametro. Dovresti quindi sostituire il 'Category__in' argomento con un argomento usando 'Tax_query'.

Puoi anche cercare post con gli stessi termini in più di una tassonomia (compresi termini e categorie), creando due array e utilizzando due argomenti nella query.

Sommario

In questo tutorial hai imparato come identificare le categorie in cui si trova il post corrente, aggiungere i loro ID a un array e quindi utilizzare quell'array per eseguire una query che visualizza i post nella stessa categoria. Questo ti dà più controllo di quello che ottieni dalla maggior parte dei plugin di post correlati, e significa che puoi definire gli argomenti per la tua query in modo che i messaggi vengano visualizzati esattamente nel modo desiderato.

Puoi anche adattare questa tecnica per lavorare con tag, termini di tassonomia o una combinazione di due o più.