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:
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.
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.
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 categorie e tag. 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.
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:
Certo, ci sono molte più possibilità. Ma, per ora, vediamo come possiamo incorporare questo nel nostro lavoro.
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.
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.
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, ilterm_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:
- La funzione può creare valori non univoci associati a un ID di un singolo termine e una singola meta chiave.
- 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 diadd_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, usiamoupdate_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:
- È possibile recuperare le informazioni senza specificare
vero
.- È 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:
- Conosci il meta valore associato alla meta chiave che desideri eliminare.
- 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