Le tassonomie all’interno di WordPress sono qualcosa di veramente importante che ti permettono di strutturare gli articoli contenuti nelle tue pagine e non soltanto; grazie a queste potrai aggiungere ai tuoi CPT categorie e tag personalizzati per catalogare qualsiasi contenuto.
Onestamente non so come e sopratutto se stai utilizzando le Categorie e i Tag che questa piattaforma ci mette a disposizione, ma se tu ancora non lo facessi lasciami dire che stai facendo un grosso errore.
Poter catalogare i tuoi articoli e lasciare a WordPress il compito di creare automaticamente delle pagine archivio non è soltanto una buona pratica SEO ma è qualcosa che permetterà al tuo visitatore di consultare soltanto le informazioni che riguardano l’argomento di suo interesse
Aiutare il proprio lettore è qualcosa di infinitamente più importante che accontentare le linee guida di un motore di ricerca.
Questa è ovviamente una mia personale opinione, ma quello che voglio affrontare in questo articolo è come creare delle tassonomie personalizzate sia per i tuoi articoli che, ancora meglio, per i tuoi CPT.
Perché in fin dei conti lo sappiamo tutti, avere le categorie e i tag generali WordPress per qualsiasi contenuto può sembrare molto limitante; sopratutto se stiamo sviluppando qualche plugin o tema personalizzato.
Tra l’altro, ti devo confessare che questo articolo l’ho scritto sotto consiglio di Marco Piccinini che con questo simpaticissimo commento (l’ultimo) mi ha ricordato che non avevo ancora trattato l’argomento tassonomie.
Eccoci allora nuovamente pronti ad apprendere qualcosa di nuovo, qualcosa che spero possa tornarti utile nella tua carriera di sviluppatore WordPress.
Come sempre, per poter seguire questo progetto, ti consiglio di lavorare in locale sulla tua installazione di test all’interno della quale fai i tuoi esperimenti creando template e plugin; ne hai una vero?!?
Ti ho fatto questa domanda perché in questo articolo andremo a seguire la logica dei Site Specific Plugin (che più volte ha aperto discussioni tra gli sviluppatori WordPress) ovvero, al posto di usare il file functions.php
per aggiungere il codice che verrà presentato andremo a creare un plugin che implementa le funzionalità di cui abbiamo bisogno.
Dovresti aver già letto in articoli come quello di Eugenio come sia possibile creare la testata di un plugin, basta qualche commento PHP ben strutturato. Inoltre per creare il nostro plugin sono necessari i classici strumenti del mestiere:
- un server web dove eseguire la nostra installazione WordPress (ma questo era ovvio 😉 );
- un’installazione WordPress (anche questa non era difficile);
- posizionarsi all’interno plugins/ e creare la cartella tassonomie-custom/.
I punti precedenti sono stati inseriti sopratutto per i novizi, se tu non dovessi essere tra questi sono convinto che questo piccolo ripasso non ti ha fatto del male 🙂
Tutto Dentro una Cartella
A questo punto dovresti avere la cartella tassonomie-custom/
completamente vuota! Tutto quello che devi fare è creare un file index.php
e lasciarlo vuoto (per questioni di sicurezza) e successivamente creare il file tassonomie-custom.php
all’interno del quale inserire la testata del plugin:
/* Plugin Name: Qui va il nome del plugin Plugin URI: http://qui_va_l_url_della_pagina_documentazione_del_plugin Description: Una breve descrizione che verrà visualizzata nel backend. Version: 1.0 Author: Nome dell'autore del plugin Author URI: http://url_del_vostro_sito_personale License: GPL2 (o anche 3 va bene) */
Queste sono le classiche informazioni che passiamo al nostro WordPress per fare in modo che sia in grado di scoprire il nostro plugin e permetterci di installarlo attraverso l’interfaccia presente nella bacheca di questa piattaforma.
Ovviamente per i nostri scopi dovrà essere leggermente differente, quindi perché non modifichi il blocco di codice precedente con quelle relative al progetto che stiamo sviluppando?
Utilizzando molta fantasia, sono riuscito a creare qualcosa come questo:
/* Plugin Name: Tassonomie Custom Plugin URI: https://skillsandmore.org/sviluppo-tassonomie-custom/ Description: Questo plugin mi consente di aggiungere nuove tassonomie per i miei articolo e CPT Version: 0.1 Author: Andrea Barghigiani Author URI: http://andreabarghigiani.info License: GPL2 */
Bene, siamo giunti al punto in cui ci diamo veramente da fare e iniziamo a capire come sia possibile creare la nostra tassonomia personalizzata. Per fare questo dovrai scoprire come si comporta la funzione register_taxonomy()
che, in modo molto simile a register_post_type()
, lavora da vicino con degli array di configurazione.
Ma non facciamo troppi discorsi, andiamo subito a vedere la sua sintassi.
register_taxonomy( 'taxonomy', array( 'post' ), $args );
Come puoi notare tu stesso, questa funzione accetta 3 parametri:
- taxonomy – questa sarà l’abbreviazione (lo slug) con la quale stai registrando la nuova tassonomia e che ti servirà per richiamarla all’interno delle tue pagine;
- array( ‘post’ ) – le tassonomie lavorano fianco a fianco con i nostri articoli e anche con i CPT giusto? Bene allora in fase di registrazione di questa tassonomia devi anche dire a WordPress di registrarla per i tipi di post che ti interessano;
- $args – ed ecco l’array di configurazione di cui ti parlavo precedentemente, al suo interno si possono definire tutte le caratteristiche della nostra tassonomia.
Quindi la struttura base di questa funzione è veramente molto semplice, ma se ci ricordiamo come pensa WordPress quando parliamo di una funzione ti dovrebbe essere apparsa in mente la domanda: e quale Hook dovrei utilizzare?
Per non starmi a ripetere e non annoiartise già conosci la struttura degli Hook in WordPress ti ho collegato precedentemente un articolo che ti spiega per filo e per segno che cosa sono queste strutture, adesso è venuto il momento di scoprire il codice completo che dovrai inserire nel plugin appena creato.
// Registro Tassonomia Custom function tassonomia_custom() { $labels = array( 'name' => _x( 'Prodotti', 'Prodotti Generali', 'text_domain' ), 'singular_name' => _x( 'Prodotto', 'Prodotto Generale', 'text_domain' ), 'menu_name' => __( 'Prodotti', 'text_domain' ), 'all_items' => __( 'Tutti i Prodotti', 'text_domain' ), 'parent_item' => __( 'Prodotto Parente', 'text_domain' ), 'parent_item_colon' => __( 'Prodotto Parente:', 'text_domain' ), 'new_item_name' => __( 'Nuovo Prodotto', 'text_domain' ), 'add_new_item' => __( 'Aggiungi Nuovo Prodotto', 'text_domain' ), 'edit_item' => __( 'Modifica Prodotto', 'text_domain' ), 'update_item' => __( 'Aggiorna Prodotto', 'text_domain' ), 'separate_items_with_commas' => __( 'Separa termini con virgola', 'text_domain' ), 'search_items' => __( 'Cerca Prodotti', 'text_domain' ), 'add_or_remove_items' => __( 'Aggiungi o Rimuovi Prodotti', 'text_domain' ), 'choose_from_most_used' => __( 'Scegli tra i Prodotti Usati', 'text_domain' ), 'not_found' => __( 'Non Trovato', 'text_domain' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, //false crea tag, true crea categorie 'public' => true, //la tassonomia e' pubblica? 'show_ui' => true, //genero una UI per gestire la tassonomia? 'show_admin_column' => true, //creo la colonna nei post associati? 'show_in_nav_menus' => true, //da selezionare nel menu? 'show_tagcloud' => false, //creo una widget tagcloud? ); register_taxonomy( 'prodotti', array( 'post' ), $args ); } // Hook into the 'init' action add_action( 'init', 'tassonomia_custom', 0 );
Ed eccoci pronti! Facendo copia/incolla del codice precedente sarai in grado di creare la tua prima tassonomia! Come puoi vedere, proprio come succede per i CPT, abbiamo due array molto particolari. Il primo prende il nome di $labels
e conterrà tutte le parole che verranno utilizzate e tradotte (sempre se il text_domain
indicato sia corretto) all’interno del nostro backend.
La parte più interessante avviene all’interno dell’array $args
che contiene tutte le configurazioni necessarie alla realizzazione della tassonomia (compreso lo stesso array $labels
):
labels
– come dicevo prima, in questa chiave dell’array verrà collegato l’array dei nomi;hierarchical
– la tassonomia che stiamo creando dovrà avere una gerarchia? Per gerarchia si intende quanto è possibile segnalare una tassonomia figlia, un po’ come succede per le categorie. Se una tassonomia ha una gerarchia stai creando una categoria se non ce l’ha allora stai creando delle etichette;public
– con questo parametro possiamo decidere se creare una tassonomia pubblica, ovvero se vogliamo mostrarla con le query, oppure se desideriamo creare una tassonomia soltanto per usi interni;show_ui
– hai bisogno di un’interfaccia utente per gestire la tassonomia?show_admin_column
– posso aggiungere la colonna della tassonomia all’interno della pagina di gestione articoli?show_in_nav_menu
– rendo disponibile la tassonomia nella configurazione del menu?show_tagcloud
– con quest’ultimo parametro possiamo scegliere se far creare una widget in grado di generare una tagcloud o meno.
A questo punto hai tutto il codice necessario per creare e collegare la tua tassonomia al CPT che desideri; ricorda, tutto quello che devi fare è aggiungere l’abbreviazione corretta all’interno del secondo parametro dichiarato nella funzione register_taxonomy()
.
Come Visualizzare la Tassonomia
Dato che non voglio fare l’errore commesso in qualche precedente articolo dove, in poche parole, ti ho mostrato come implementare un CPT ma poi non ti ho mostrato come visualizzarlo nel frontend, ecco che pongo subito rimedio!
Se sviluppi con WordPress da diverso tempo ormai dovresti sapere che esistono delle funzioni specifiche per richiamare le categorie ed i tag. Grazie a the_category()
o a the_tags()
siamo in grado di mostrare rispettivamente questi elementi, ma queste sono helper functions che ci sono state fornite da WordPress per andare a richiamare queste tassonomie standard appartenenti alla piattaforma.
Come fare per mostrare la nostra tassonomia appena creata?
Ricordi quando ti ho detto di tenere a mente l’abbreviazione (io preferisco lo slug) che abbiamo usato per registrare la tassonomia? Quella parola tra virgolette non è altro che il primo parametro della funzione register_taxonomy()
; quella che noi abbiamo chiamato prodotti
.
Ebbene, è giunto il momento di iniziare a usarla!
//Creo l'array di configurazione $args = array( 'taxonomy' => 'prodotti', //slug tassonomia 'orderby' => 'name', //ordinamento 'show_count' => 0, //1 per si, 0 per no 'pad_counts' => 0, //1 per si, 0 per no 'hierarchical' => 1, //1 per si, 0 per no 'title_li' => 'Lista Prodotti' //Aggiungi un titolo ); //Mostro le Categorie wp_list_categories( $args );
Come ormai dovresti iniziare ad abituarti, anche in questo caso il codice che ti ho presentato presenta un array di configurazione. Alla chiave taxonomy
andrà inserito lo slug della tassonomia che vogliamo elencare, tutti gli altri parametri sono i classici parametri che puoi utilizzare con la funzione wp_list_categories()
che, in questo caso, ci aiuta a mostrare tutti gli elementi della nostra tassonomia.
Con il codice che ti ho appena presentato sarai in grado di aggiungere tutte le voci della tua nuova tassonomia in qualsiasi parte del tuo progetto, tutto quello che dovrai fare è richiamare questa semplice funzione e il gioco è fatto.
Ma adesso arriva un altro dubbio…
Come faccio a mostrare soltanto le voci appartenenti al post che viene consultato? Ovvero, un po’ come succede con la funzione the_category()
, io voglio elencare soltanto le voci della tassonomia selezionate per il post corrente.
Per fare questo dovrai usare un’altra funzione che prende il nome di the_terms()
che funziona incredibilmente bene all’interno del Loop WordPress.
<?php the_terms( $post->ID, 'prodotti', 'Dove Sei: ', ' / ' ); ?>
Con questa singola riga di codice (presa in prestito e leggermente modificata direttamente dal Codex WordPress) ti mostro il perché questa funzione lavora incredibilmente bene all’interno del Loop. Come puoi notare dal primo parametro, $post->ID
, questa funzione accetta l’ID del post per riuscire a trovare i termini usati dalla tassonomia prodotti
.
Ovviamente potrai usare questa funzione anche fuori dal Loop, l’unica cosa di cui avrai bisogno è conoscere l’ID del post per il quale vuoi ottenere queste informazioni.
Oltre a questo, la funzione the_terms()
accetta altri parametri come il $before
che ci permette di impostare il testo da aggiugere prima dei nostri termini ed anche un separatore. In poche parole, una volta popolata la nostra tassonomia, questo codice ci mostrerà qualcosa di questo tipo:
Dove Sei: Elettrodomestici / Multimedia / TV
Probabilmente non è la rappresentazione più carina al mondo, ma per gli scopi formativi di questo articolo dovremmo essere a posto 😉
Prima di Concludere
Giusto prima di concludere vorrei parlarti della soluzione semplice che potrai seguire per creare le tue tassonomie personalizzate. Sicuramente ti farà comodo aver passato tutto questo tempo a scoprire quali funzioni puoi utilizzare per creare la tua tassonomia personalizzata ma sapevi che non è necessario ricordarsele a memoria?
Per questa cosa bisogna ringraziare lo sviluppatore di una web app gratuita che si chiama GenerateWP ed ha molte cose che ti potranno essere utili 😉
La schermata che ho inserito qua sopra non è altro che la prima pagina del configuratore di tassonomie che puoi trovare all’interno di questo interessante progetto. Come puoi vedere dalle voci di menu, le pagine di configurazione sono diverse ma la cosa bella è che non avrai bisogno di compilarle tutte.
Molte di queste voci hanno delle funzionalità avanzate come la possibilità di modificare la variabile da utilizzare nelle tue query oppure le capability che l’utente deve avere per modificare la tua tassonomia; ma anche se non le inserisci il codice che viene generato funzionerà correttamente.
Conclusioni
Ti sembra che sia stato cattivo a parlarti prima della teoria e poi a mostrarti uno strumento che ti aiuterà a creare (tra le altre) delle tassonomie? Io non credo proprio!
Per prima cosa tutto il codice che ti ho presentato potrebbe essere salvato all’interno di comode snippet che utilizzerai con il tuo editor di testo, successivamente se non ti avessi spiegato la teoria come avresti potuto utilizzare il tool di GenerateWP?
Oltre a questo, ho deciso di fare una cosa nuova in questo articolo, dato che recentemente abbiamo parlato di Git e dei vari modi che gli sviluppatori usano per condividere del codice, ho deciso di creare un repository apposito per questo semplicissimo plugin. Così se non hai voglia di scrivere tutto da solo, non devi far altro che clonare il mio repository all’interno del tuo WordPress e personalizzare i dati che ti interessano.
Dato che questa è una nuova iniziativa e non so in quanti la utilizzeranno vorrei sapere da te che cosa ne pensi, se non hai voglia di scrivere un commento, non devi far altro che lasciare una stellina sul progetto di GitHub ed io capirò che questa è la strada giusta per continuare 😉
Ciao Andrea,
io faccio ancora un po’ di confusione con le tassonomie, non capisco bene quando le devo usare.
Ad esempio, devo fare un sito per un libero professionista che fa tre tipi di servizi e ogni servizio ha delle sotto pagine. In questo caso è meglio fare delle pagine e sotto pagine o fare delle tassonomie? Ovviamente questi 3 servizi con sotto menu saranno nel menù di navigazione. Grazie!
Ciao Elisa,
l’uso delle tassonomie deve rispettare la struttura che hai dato al tuo sito per prima cosa. Generalmente le categorie rappresentano una raccolta sugli argomenti generali del sito mentre i tag permettono spesso di offrire una raccolta su argomenti più specifici trattati all’interno di un singolo articolo.
Per fare un esempio molto semplice diciamo che potremmo avere una categoria che parla di Sviluppo e a come tag specificare lo specifico linguaggio di programmazione che viene trattato all’interno dell’articolo.
Comunque non prendere soltanto le mie parole come buone, ti consiglio di vedere anche questo breve video del bravo Giorgio Taverniti dove anche lui offre il suo punto di vista a riguardo.
Spero con questo di averti fornito uno spunto maggiore verso la comprensione di questi elementi ma se così non fosse non esitare a commentare nuovamente l’articolo 😉
Ciao, grazie per l’articolo. Ho creato diverse tassonomie, ora vorrei collegarci dei post che abbiano un URL figlio della tassonomia.
Esempio:
Tassonomia Libri (Nome->Libri, Slug->/libri)
Come faccio a creare un post che abbia come URL /libri/nome-post ?
Grazie!
Ciao Davide e intanto grazie per il commento e i complimenti!
Per quanto riguarda il tuo problema io cercherei di comprendere al meglio il funzionamento dei permalink all’interno di WordPress, in questo modo sarai in grado di personalizzare la struttura dei tuoi link e avvicinarti alla soluzione che stai cercando di realizzare.
Se il sito è online e i motori di ricerca lo conoscono di già, ti consiglio di pianificare la creazione di redirect che ti permetteranno di non perdere l’indicizzazione che hai guadagnato nel tempo 😉
A presto.
Andrea
Ciao Andrea, volevo chiederti se è possibile recuperare le tassonomie in ordine gerarchico. Ad es. supponendo di avere un CPT con slug ‘musica’ e di voler elencare per ogni artista gli album con le relative canzoni, ho provato a creare una tassonomia personalizzata ‘categorie_musicali’ con una categoria genitore ‘album’ e una categoria figlia ‘canzoni’ (poi, se volessi creare delle playlist potrei usare i tags). Così facendo, con la riga che hai proposto ID, ‘prodotti’, ‘Dove Sei: ‘, ‘ / ‘ ); ?> effettivamente ottengo “album / canzone”, ma in ordine alfabetico, indipendentemente dalla gerarchia. Io invece vorrei visualizzare una cosa tipo: “album: ‘album’ – canzone: ‘canzone'”. Per ottenere questo in che modo dovrei procedere? – sempre sia corretto come approccio.
grazie e complimenti per i tuoi articoli.
Ciao Enrico, grazie mille per il commento e i complimenti! Queste sono le cose che ci fanno capire se e quanto il nostro materiale viene apprezzato e non possiamo fare a meno che ringraziarti per questo.
Venendo invece al tuo problema, anche se non conosco bene la struttura gerarchica che hai creato, devo avvisarti che la funzione
the_terms()
non è la più adatta al raggiungimento dei tuoi scopi. Molto più utile invece trovo utilizzare la funzioneget_the_terms()
per avere in risposta un array contenente tutti gli oggetti WP_Term che sono utilizzati all’interno del tuo articolo. In questo modo potrai sfruttare alcuni cicli e condizioni per mostrare la struttura che preferisci.Ti consiglio di leggere la pagina dedicata del Codex e continuare questa interessante conversazione qualora ne sentissi la necessità.
A presto e buon proseguimento di giornata.
Andrea
Ciao scusa io sto sbroccando letteralmente con una tassonomia creata con CPT UI vorrei che i contenuti dei post venissero ordinati alfabeticamente ma sembra non essere possibile come posso riuscire ad avere il risultato desiderato?
Grazie mille Marco
Ciao Marco,
onestamente dipende da dove stai mostrando l’elenco delle tue tassionomie. In questo articolo parliamo di tassonomie e senza maggiori informazioni il consiglio che ti posso dare è quello di usare la funzione
get_terms()
e utilizzare alcuni parametri comeorderby
eorder
per fare in modo che la lista dei termini che stai visualizzando si comporti come desiderato.Oppure se mi stai parlando dell’elenco di post che si presenta all’interno di una pagina di archivio di una tassionomia (una categoria in questo caso), allora dobbiamo ricordarci che il Loop WordPress elenca sempre le risorse partendo dalla più recente e se desideri modificare questo comportamento non devi far altro che sfruttare la gerarchia di un tema e creare il tuo file
category.php
e specificare al suo interno l’ordinamento specifico per il loop. Dovrai sempre usareorderby
eorder
per modificare questi atteggiamenti.Prima di salutarti volevo rispondere a una mia curiositò: perché stai cercando di ordinare alfabeticamente una lista di post? Stai creando un glossario?
Perché se così fosse noi abbiamo creato un plugin gratuito che ti permette proprio di fare questo e ha un motore interno per la creazione di link ai termini in modo automatico. Se vuoi avere maggiori informazioni non esitare a chiedere di nuovo 😉
Se invece vuoi aprofondire le tue conoscenze WordPress e scoprire come creare i tuoi temi personalizzati, allora non posso fare a meno che sponsorizzare il nostro corso dedicato all’interno del quale potrai conoscere tutti i dettagli che riguardano la creazione di un tema WordPress!
Spero di averti indicato la via giusta, altrimenti fammi sapere se non hai ancora risolto il tuo problema 🙂