Come lavorare con WordPress Term Meta Term Metadata API

Il primo post di questa serie ha gettato le basi per comprendere le tassonomie, i termini e la loro relazione nel contesto di WordPress. Se non l'hai ancora letto e sei nuovo di zecca per lo sviluppo di WordPress, allora ti raccomando caldamente di leggerlo perché questo post andrà a finire sopra tutto ciò che è coperto in quell'articolo.

Inoltre, mentre procediamo parlando di più tipi di metadati, è importante rivedere le serie precedenti in cui abbiamo trattato:

  • Pubblica metadati
  • Metadati dell'utente
  • Commenta i metadati

Il motivo per cui vale la pena rivedere questi articoli è perché questo articolo assomiglierà ad alcune delle tecniche trattate in quegli articoli, e si baserà anche su alcune delle strategie con il lavoro con API simili.

Soprattutto, questo tutorial mira a fornire una panoramica su come lavorare con una delle più recenti API di metadati disponibili in WordPress.

Un disclaimer per sviluppatori

Come accennato in precedenza, questo particolare articolo è rivolto più a coloro che stanno appena entrando nello sviluppo di WordPress o che stanno cercando di far crescere le proprie capacità. Quindi, se sei uno sviluppatore avanzato, i contenuti trattati in questo articolo potrebbero non essere di tuo interesse.

Una delle cose fondamentali da ricordare durante il tutorial è che il codice non deve essere utilizzato in un ambiente di produzione. Cioè, ha lo scopo di studiare esclusivamente l'API e capire come funziona.

Il codice che stiamo scrivendo non è pensato per essere utilizzato in un progetto che verrà utilizzato per un pubblico o da un gruppo di utenti. Il motivo principale è perché ci sono argomenti come la disinfezione, la convalida, l'escaping e così via che vanno oltre lo scopo delle serie precedenti e anche di questa serie.

Dopo aver completato questo articolo, passeremo ad argomenti più avanzati come quelli, ma per ora ci concentreremo esclusivamente sull'API dei metadati termine.

Un aggiornamento su tassonomie e termini

Prima di parlare dell'API dei metadati, assicuriamoci che siamo tutti sulla stessa pagina in cui si riferisce alla terminologia che utilizzeremo. Nello specifico, dobbiamo assicurarci di comprendere le tassonomie, i termini e la relazione tra i due.

Innanzitutto, il Codex definisce le tassonomie come:

In WordPress, una "tassonomia" è un meccanismo di raggruppamento per alcuni post (o collegamenti o tipi di messaggi personalizzati).

In un'installazione di WordPress predefinita, puoi pensare a questi come categorietag. Possono essere gerarchici, come categorie o tag non gerarchici.

I termini, d'altra parte, sono definiti come:

In WordPress, un termine è una classificazione, un gruppo o un sottoinsieme di una Tassonomia, in cui quest'ultimo può essere una categoria, un tag o una tassonomia personalizzata. Per impostazione predefinita, i termini hanno un titolo, una lumaca e una descrizione. Le tassonomie gerarchiche come le categorie possono definire un termine genitore.

Infine, la relazione tra tassonomie e termini è tale che non si può realmente esistere senza l'altro (specialmente nelle tassonomie gerarchiche). Cioè, una tassonomia di categoria deve avere almeno un termine associato ad esso; tuttavia, le tassonomie non gerarchiche non devono necessariamente seguirlo.

Detto ciò, iniziamo a lavorare con l'API Term Metadata.

Lavorare con l'API

Come con le altre API di metadati disponibili, saremo in grado di fare cose come:

  • Inserisci
  • aggiornare
  • recuperare
  • Elimina

E poiché questa è una nuova API, potrebbe non essere immediatamente chiaro quali siano alcuni dei vantaggi di questa API. Anche se in questo articolo esploreremo solo alcune delle nozioni di base, vale la pena considerare alcune delle cose che possiamo fare.

Per esempio:

  • Associare colori o immagini con un termine
  • Limita determinati post che appartengono a un termine
  • Aggiungi dati binari, come documenti o PDF, per un termine che può essere reso disponibile sul front-end
  • ... e altro ancora.

Certo, ci sono molte più possibilità. Ma, per ora, vediamo come possiamo incorporare questo nel nostro lavoro.

Preparare il tema

Per iniziare, assicurati di essere nella stessa pagina su ciò che utilizzeremo per completare questo lavoro. In particolare, ecco di cosa hai bisogno, ed ecco cosa sto usando.

  • un IDE userò Atom
  • un front-end del database: userò Sequel Pro
  • una versione di WordPress - userò WordPress 4.4.2
  • un tema di base: userò twentysixteen

Una volta che avrai tutto questo, saremo pronti per partire. Se hai bisogno di aiuto per impostare il tuo ambiente di sviluppo, consulta questa serie di articoli.

Iniziare

La prima cosa che dobbiamo fare è creare un file che conterrà tutto il lavoro che andremo a fare in questo tutorial.

In primo luogo, dobbiamo creare tutsplus termine-metadata.php nella radice del twentysixteen directory dei temi.

Successivamente, dobbiamo aggiungere la seguente riga di codice al file functions.php del tema. Questo assicurerà che stiamo includendo il nostro lavoro nel tema.

Quando ricarichi il browser, dovresti vedere qualcosa come la seguente immagine:

Non dovrebbe esserci alcun output di errore e dovrebbe funzionare come se nulla fosse cambiato. Infine, se stai lavorando con una nuova installazione di WordPress, il termine tabella dei metadati dovrebbe apparire completamente vuoto:

Quindi, per assicurarci di avere una categoria con cui stiamo lavorando, procedi e crea una nuova categoria nella tua installazione di WordPress. Ne creerò una chiamata Principale e assicurati che Ciao mondo è timbrato con questo.

Una volta terminato, dai un'occhiata alla tabella dei termini nel database per ottenere il term_id. Nel mio caso, il term_id è 2. Il vostro può variare, ma il punto è che voi conoscete quell'ID del termine in questione:

Prendi nota mentre lo useremo durante il tutorial.

Aggiunta di metadati

Per iniziare, è importante riconoscerlo add_term_meta la funzione può servire a due scopi:

  1. La funzione può creare valori non univoci associati a un ID di un singolo termine e una singola meta chiave.
  2. La funzione può creare valori univoci associati a un ID di un singolo termine e una singola meta chiave.

La funzione accetta un ID di termine, una meta chiave, un meta valore e un valore booleano facoltativo che determina se il valore che si sta memorizzando è univoco.

Valori unici

Innanzitutto, creiamo un valore univoco nel database. Inserisci il seguente codice nell'editor, aggiorna Ciao mondo, e quindi visualizzare il termmeta tavolo. 

term_id; if (1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value', true);  return $ content;  

Dovresti vedere le tue informazioni.

Se modifichi il meta valore e aggiorni la pagina, dovresti notare che il valore nel database è presente non cambiato. Questo perché hai detto che questo dovrebbe essere un valore univoco e il primo valore scritto non verrà modificato o sovrascritto. 

Questo può essere raggiunto con update_term_meta, ma guarderemo quel codice per un momento.

Valori non unici

Prima di guardare come possiamo aggiornare il termine meta, però, diamo un'occhiata a come possiamo aggiungere più valori alla stessa meta chiave e allo stesso ID di termine. Il codice sotto sembra simile al codice sopra, tranne che non stiamo passando true alla funzione.

term_id; if (1 === get_the_ID () && 2 === $ term_id) for ($ i = 0; $ i < 3; $i++ )  $meta_value = "my_meta_value_$i"; add_term_meta( $term_id, 'non_unique_key', $meta_value );   return $content; 

ricaricare Ciao mondo un paio di volte e poi dare un'occhiata al database. Dovresti vedere qualcosa di simile a questo:

Ha senso? Fondamentalmente, quando dici che vuoi avere un valore univoco, il primo valore che inserisci rimarrà come il solo valore (a meno che non lo aggiorni o lo elimini). 

Se, d'altra parte, non si specifica che si desidera che sia un valore univoco, è possibile memorizzare tutti i valori desiderati con il termine ID e la meta chiave.

Questo, tuttavia, apre la strada al recupero delle informazioni e alla cancellazione delle informazioni in modo diverso dal database; daremo un'occhiata a questo più in dettaglio più avanti nell'articolo.

Aggiornamento dei metadati

La funzione API update_term_meta ci offre un paio di belle opzioni. Innanzitutto, ci dà la possibilità di aggiungere una singola voce unica nel database senza dover utilizzare il quarto parametro di add_post_meta.

In secondo luogo, ci consente di aggiornare una parte specifica dei metadati finché sappiamo quale fosse il valore precedente. Diamo un'occhiata a entrambi questi casi dato lo stato attuale del nostro database.

Aggiunta di dati unici

Per aggiungere metadati unici, possiamo effettuare una chiamata molto simile a quella che abbiamo visto nel primo esempio add_term_meta. Invece, questa volta, usiamo update_term_meta. Ad esempio, rivedere il seguente codice:

term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value');  return $ content; 

ricaricare Ciao mondo un paio di volte e non importa quante volte lo si aggiorna, vedrete un singolo valore inserito nel database. Se stai seguendo il codice, dovresti vedere qualcosa di simile a questo:

Ma cosa succede quando ci sono più record con la stessa meta chiave e vogliamo aggiornarli?

Aggiornamento di un record non univoco

Per aggiornare un record che ha lo stesso ID di termine e lo stesso meta-chiave, è importante conoscere il valore precedente. Nel nostro caso, sappiamo che abbiamo un valore chiamato my_meta_value_1

A tal fine, possiamo aggiornare questa riga specifica specificando il nuovo valore e il vecchio valore nel update_term_meta funzione. Per fare questo, dai un'occhiata al seguente codice:

term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1');  return $ content; 

E poi aggiorna Ciao mondo. Una volta fatto, il valore meta aggiornato dovrebbe apparire come questo:

Se non visualizzi lo stesso risultato, assicurati di aver specificato correttamente il nome corretto della funzione nel tuo hook, l'ID del termine di scrittura, la metatera destra e il valore meta di destra precedente.

Recupero dei metadati

Per ottenere i metadati che abbiamo recuperato, possiamo usare il get_term_meta funzione. 

Nota, tuttavia, che quando recuperiamo i metadati del termine, potremmo avere a che fare con una meta chiave che ha diversi valori associati ad essa. Oppure potremmo avere a che fare con una meta chiave che ha un solo valore.

A seconda della situazione, sarà necessario specificare diverse informazioni sulla funzione. 

Recupero di tutti i metadati

Recuperare tutti i metadati associati a un singolo termine è facile, come dimostrerà il codice seguente. La cosa fondamentale da prestare attenzione è che i risultati vengono restituiti in un array. 

Nell'esempio seguente, useremo il non_unique_key come la nostra meta chiave in quanto ha diversi valori associati ad essa.

term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key');  return $ content; 

Puoi scegliere di far apparire i risultati sullo schermo, puoi scegliere di usare var_dump, oppure puoi scegliere di usare un debugger per visualizzare le informazioni. In ogni caso, dovresti vedere qualcosa come il seguente come risultato:

array (3) [0] => string (15) "my_meta_value_0" [1] => string (23) "my_meta_value_1_updated" [2] => string (15) "my_meta_value_2"

Dato questo output, si può scegliere di memorizzarlo in una variabile e quindi recuperare un certo valore da un dato indice. O forse dovresti scegliere di scorrere i dati e leggerli o manipolarli.

Qualunque sia il tuo caso d'uso, ecco come recuperare tutte le informazioni associate a una meta chiave.

Recupero di un singolo pezzo di metadati

Quando parliamo di recuperare un singolo pezzo di metadati, normalmente intendiamo che stiamo cercando di recuperare un record da molti (come nel nostro esempio sopra); tuttavia, potrebbero esserci casi in cui vogliamo recuperare un singolo meta-valore associato a una singola meta-chiave.

Parleremo del caso successivo in un momento. Ma prima, copriamo il caso in cui vogliamo recuperare un singolo valore da un insieme di dati che ha lo stesso ID di termine e la stessa meta chiave.

Nota nel codice qui sotto, stiamo passando un quarto valore, vero:

term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true);  return $ content; 

Ed ecco cosa viene restituito:

string (15) "my_meta_value_0"

Si noti che questo restituisce il primo valore che trova e lo fa sotto forma di stringa.

Cosa succede se c'è un solo record?

Se c'è solo un record, allora hai due opzioni:

  1. È possibile recuperare le informazioni senza specificare vero.
  2. È possibile recuperare le informazioni specificando vero.

Se si opta per il primo caso, si ritornerà un array con un singolo indice e un singolo valore. In quanto tale, dovrai prendere il valore dal risultato facendo qualcosa di simile $ valore = $ risultato [0] supponendo che si stia memorizzando il risultato della chiamata della funzione $ result.

D'altra parte, se si opta per la seconda opzione, allora ci si può aspettare che il risultato sia restituito a stringa.

Probabilmente, la cosa più importante da notare nell'approssimarsi ai valori di questa particolare strategia è che i valori sono unici data la loro meta-chiave.

Eliminazione dei metadati

Infine, dobbiamo dare un'occhiata alla rimozione dei metadati associati. E, in linea con il resto dei nostri esempi, questo dipende dal fatto che ci siano diversi pezzi di metadati associati a una meta chiave o un singolo meta-valore associato a una meta chiave.

Eliminazione di tutti i record

Se sai che esiste una singola meta chiave con diversi valori associati, puoi utilizzare il seguente codice:

term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key');  return $ content;  

E ciò aggiornerà la tabella del database in modo tale che assomigli a questo:

Se hai seguito, saprai che sono stati rimossi tutti i dati associati a non_unique_key meta chiave.

Eliminazione di un singolo record

Se si desidera eliminare un singolo record, ci sono due modi per farlo:

  1. Conosci il meta valore associato alla meta chiave che desideri eliminare.
  2. Il valore associato alla meta chiave specificata è unico in quanto la meta-chiave e il meta-valore sono unici.

A tal fine, daremo un'occhiata al primo esempio in questa sezione, e daremo un'occhiata al secondo esempio in questa sezione.

Per cancellare un singolo record in cui conosciamo il meta valore associato, possiamo scrivere un codice che specifica sia la meta-chiave che il meta-valore. Per esempio:

term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value');  return $ content; 

Questo rimuoverà la riga associata a queste informazioni dal database.

Eliminazione di un record univoco

Infine, se esiste un singolo record univoco in cui si conosce la meta chiave ma non si conosce il valore meta, è comunque possibile eliminare quel record dal database.

Tutto quello che devi specificare nel codice sorgente è la meta chiave. Vedi nella seguente funzione:

term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key');  return $ content; 

Probabilmente i lettori più attenti capiranno che la funzione di cui sopra è la stessa definizione di funzione che abbiamo fornito durante l'eliminazione di record che hanno tutti più valori. E questo perché loro siamo lo stesso.

La differenza, però, è il intento della funzione. L'intento di una funzione spesso guida il modo in cui denominiamo la funzione. Nel caso precedente, volevamo eliminare tutti i metadati del termine. In questo caso, volevamo eliminare un singolo pezzo di metadati di termini.

Ciò ha implicazioni quando si tratta di scrivere codice di qualità e quando si tratta di scrivere test unitari.

Il codice sorgente completo

Qui, troverai tutto il codice che abbiamo usato in questo post insieme a commenti aggiuntivi che spiegano cosa sta succedendo nel codice. Ricorda che tutte queste funzioni sono collegate il contenuto, il che significa che le funzioni si attivano ogni volta che viene caricato il post.

Come tale, il add_filter le chiamate sono commentate in modo da poterle abilitare secondo necessità.

term_id; if (1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value_changed', true);  return $ content;  // add_filter ('the_content', 'tutsplus_add_term_metas'); / ** * Se siamo nel primo post e nella categoria con l'ID * di '2', aggiungiamo più meta-valori con lo stesso * meta-chiave per i metadati del termine. * * @param stringa $ contenuto Il contenuto del post. * @return string Il contenuto del post. * / function tutsplus_add_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categoria [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) for ($ i = 0; $ i < 3; $i++ )  $meta_value = "my_meta_value_$i"; add_term_meta( $term_id, 'non_unique_key', $meta_value );   return $content;  //add_filter( 'the_content', 'tutsplus_update_term_meta' ); /** * Updates the term meta value with the specified key. If the value * doesn't exist, then the record will be created. This will only * be added if the 'Hello World' page is loaded with the category * having the ID of '2'. * * @param string $content The post content. * @return string The post content. */ function tutsplus_update_term_meta( $content )  $category = get_the_category(); $term_id = $category[0]->term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value');  return $ content;  // add_filter ('the_content', 'tutsplus_update_term_metas'); / ** * Aggiorna il valore esistente per i metadati che hanno la meta chiave 'non_unique_key' * con il valore meta specificato. Questo succede solo se siamo sul * post con l'ID di uno e ha l'ID di categoria di '2'. * * @param stringa $ contenuto Il contenuto del post. * @return string Il contenuto del post. * / function tutsplus_update_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categoria [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1');  return $ content;  // add_filter ('the_content', 'tutsplus_get_term_metas'); / ** * Se siamo nel primo post e il post ha l'ID di categoria di "2", quindi * recupera il termine meta sotto forma di array. * * @param stringa $ contenuto Il contenuto del post. * @return string Il contenuto del post. * / function tutsplus_get_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categoria [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key');  return $ content;  // add_filter ('the_content', 'tutsplus_get_term_meta'); / ** * Se siamo nel primo post e il post ha l'ID di categoria di "2", quindi * recupera il primo valore dai metadati come una stringa. * * @param stringa $ contenuto Il contenuto del post. * @return string Il contenuto del post. * / function tutsplus_get_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categoria [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true);  return $ content;  // add_filter ('the_content', 'tutsplus_delete_term_metas'); / ** * Se siamo nel primo post e il post ha l'ID di categoria di "2", quindi * cancella i metadati associati alla chiave specificata. * * @param stringa $ contenuto Il contenuto del post. * @return string Il contenuto del post. * / function tutsplus_delete_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categoria [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key');  return $ content;  // add_filter ('the_content', 'tutsplus_delete_term_meta'); / ** * Se siamo nel primo post e il post ha l'ID di categoria di "2", quindi * elimina il meta valore specificato associato al meta chiave specificato. * * @param stringa $ contenuto Il contenuto del post. * @return string Il contenuto del post. * / function tutsplus_delete_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categoria [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value');  return $ content;  // add_filter ('the_content', 'tutsplus_delete_single_term_meta'); / ** * Se siamo nel primo post e il post ha l'ID di categoria di "2", quindi * cancella i metadati associati alla chiave specificata. * * @param stringa $ contenuto Il contenuto del post. * @return string Il contenuto del post. * / function tutsplus_delete_single_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categoria [0] -> term_id; if (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key');  return $ content;  

Non è affatto raro trovare funzioni come questa agganciate ad un altro amo come save_post o qualcosa di simile. Questo è qualcosa che tratteremo in modo più dettagliato in un tutorial avanzato più avanti in quest'anno.

Conclusione

Per coloro che hanno seguito questa serie e le serie precedenti lavorando con il resto dell'API dei metadati, gran parte del materiale trattato in questa serie non dovrebbe essere troppo difficile da comprendere.

Forse la parte più difficile del lavoro con questa API sta esercitando la tua creatività sui molti modi in cui può essere effettivamente utilizzata. Ma dal momento che abbiamo coperto Come lavorare con l'API, metterlo in funzione non dovrebbe essere terribilmente difficile.

Ricorda che nelle prossime settimane esamineremo tecniche avanzate e appropriate per la scrittura e la lettura delle informazioni nel database in modo tale da essere in grado di lavorare con loro in un ambiente di produzione.

Nel frattempo, se stai cercando altre utilità che ti aiutino a costruire il tuo set crescente di strumenti per WordPress o che il codice studi e diventi più esperto in WordPress, non dimenticare di vedere cosa abbiamo a disposizione in Envato Mercato.

Ricorda, puoi prendere tutti i miei corsi e tutorial nella pagina del mio profilo, e puoi seguirmi sul mio blog e / o Twitter su @tommcfarlin dove parlo di varie pratiche di sviluppo del software e come possiamo impiegarle in WordPress.

Non esitare a lasciare qualsiasi domanda o commento nel feed qui sotto e cercherò di rispondere a ciascuno di essi.

Risorse correlate

  • Campi personalizzati
  • get_the_category
  • add_term_meta
  • update_term_meta
  • get_term_meta
  • delete_term_meta
  • eco
  • var_dump