In questo tutorial ti mostrerò come creare una tabella che visualizzi gli articoli che abbiano almeno un tag in comune con l'articolo che si sta visualizzando.
Per prima cosa dobbiamo creare alcuni articoli che abbiano gli stessi tag. Ad esempio puoi creare una serie di articoli così composti:
| Post title | Tag |
| Venice | Italy |
| Rome | Italy, Capital |
| Milan | Italy |
| Paris | France, Capital |
| Marseille | France |
Clicchiamo sul plugin ADMIN FORM e poi sul bottone "CREATE NEW FORM" Nel nome scriviamo Articoli correlati. Scegliamo 'Choose an existing table' e selezioniamo wp_term_relationships
Una volta salvato apparirà nel tab FORM iun messaggio che ci avverte che non è presenta una chiave primaria valida per la modifica dei dati. In questo caso vogliamo infatti solo visualizzare gli articoli con tag simili e non stiamo lavorando su una lista che modifichi i dati.
Andiamo sul tab setting e nella sezioni Admin sidebar menu deselezioniamo Show in admin menu.
Per permettere allo script di visualizzare solo gli articoli che ci interessano dobbiamo creare due filtri. Noi vogliamo che vengano estratti tutti gli articoli che hanno almeno un tag uguale a quello dell'articolo che si sta visualizzando. Per fare questo vogliamo che tr.term_taxonomy_id sia uguale ad uno degli id dei tag (term) dell'articolo che si sta visualizzando. Per avere l'id dell'articolo che si sta visualizzando si può usare lo shortcode [^current_post.id]
Per avere l'elenco degli id dei tag di un articolo possiamo usare la funzione [^get_post_tags]. Quindi scrivendo nel primo filtro:
Select Column: ter.term_taxonomy_id, il tipo di filtro è IN (Match in array), il valore è:
[^get_post_tags.term_id post_id=[^current_post.id]].
Il secondo filtro invece dice che l'id degli articoli estratti devono essere diversi dall'id dell'articolo che si sta visualizzando. Questo per evitare di mostrare lo stesso articolo che si sta visualizzando tra gli articoli correlati.
Select Column: ter.object_id, il tipo di filtro è != (Does NOT Equal), il valore è:
[^current_post.id].
Salvo le impostazioni
Lo shortcode per pubblicare la lista lo trovi in alto a destra.
Puoi pubblicare lo shortcode nel template così da applicarlo in tutte le pagine oppure nei singoli articoli
Altrimenti puoi usare il php per caricare la lista e pubblicarla a tuo piacere. Ecco un esempio per caricare la lista in fondo ai post. Inserisci il codice nel template dentro function.php e sostituisci {list_id} con l'id della lista appena creata.
function add_dbp_list_to_content($content) {
$append = '';
if (is_single()) {
$append = "<h3>TEST RELEATED POST</h3>" . admin_form\ADFO::get_list('{list_id}');
}
return $content.$append;
}
add_filter('the_content', 'add_dbp_list_to_content');
Se proviamo a pubblicare la tabella all'interno degli articoli apparirà qualche cosa del genere:
Object_id mostra l'id del post, ora dobbiamo visualizzare il titolo.
Apriamo la modifica della prima colonna (object_id).
Deseleziona "Keeps settings aligned with information from the same field in tab 'Form'". Questa opzione consente di modificare automaticamente le impostazioni della colonna in base a come si modifica il campo nella scheda Modulo.
Come titolo scegliamo "Articles" mentre come tipo scegliamo CUSTOM.
A questo punto si aprirà una textarea in cui inseriremo
<a href="[^LINK id=[%data.object_id]]">[^post.title id=[%data.object_id]]</a>Nelle colonne successive selezioniamo Hide per non farle apparire.
Ecco come dovrebbe apparire il risultato finale
Quando scrivi nel template engine integrato di ADMIN FORM Ricordati sempre che tra gli attributi e il valore non ci devono mai essere spazi! Quindi [^get_post_tags.html post_id = [%data.object_id]] ad esempio non funzionerà perché prima e dopo il simbolo = ci sono due spazi