Cum sa lucrezi cu WordPress Term Meta Metadata API

Primul post din această serie a pus bazele înțelegerii taxonomiilor, termenilor și relației lor în contextul WordPress. Dacă nu ați citit-o încă și sunteți nou-noutăți în dezvoltarea WordPress, vă recomand să citiți prin aceasta, deoarece acest post se va baza pe tot ce se regăsește în acel articol.

În plus, pe măsură ce continuăm să vorbim despre mai multe tipuri de metadate, este important să examinăm seria anterioară în care ne-am referit:

  • Postați metadatele
  • Metadatele utilizatorului
  • Comentariu metadate

Motivul pentru care merită revizuit aceste articole se datorează faptului că acest articol se va asemăna cu unele dintre tehnicile acoperite de acele articole și se va baza, de asemenea, pe unele dintre strategiile de lucru cu API-uri similare.

Mai presus de toate, acest tutorial își propune să ofere o descriere a modului de lucru cu unul dintre cele mai noi metadate API-uri disponibile în WordPress.

O Declarație de responsabilitate pentru dezvoltatori

După cum sa menționat anterior, acest articol este orientat mai mult către cei care se află în dezvoltarea WordPress sau care doresc să își dezvolte abilitățile. Deci, dacă sunteți un dezvoltator avansat, atunci conținutul prezentat în acest articol poate să nu fie cel mai interesant pentru dvs..

Unul dintre lucrurile cheie pe care trebuie să le reamintim pe măsură ce lucrăm prin acest tutorial este că codul nu trebuie utilizat într-un mediu de producție. Aceasta înseamnă că intenționează să studiezi doar API-ul și să înțelegi cum funcționează.

Codul pe care îl scriem nu este destinat a fi utilizat într-un proiect care va fi folosit pentru un public sau pentru un grup de utilizatori. Principalul motiv este că există subiecte precum dezinsecția, validarea, evadarea și așa mai departe, care depășesc sfera seriei anterioare, precum și această serie.

După ce am înfășurat acest articol, vom trece la subiecte mai avansate, cum ar fi cele, dar pentru moment ne vom concentra doar pe API metadate termen.

O revizuire a taxonomiilor și termenilor

Înainte de a vorbi despre API-ul metadatelor, asigurați-vă că suntem cu toții pe aceeași pagină în care se referă la terminologia pe care o vom folosi. Mai exact, trebuie să ne asigurăm că înțelegem taxonomiile, termenii și relația dintre cele două.

În primul rând, Codul definește taxonomiile ca:

În WordPress, o "taxonomie" este un mecanism de grupare pentru unele postări (sau link-uri sau tipuri personalizate de posturi).

Într-o instalare implicită WordPress, vă puteți gândi la acestea ca la categorii și Etichete. Acestea pot fi ierarhice, ca categorii sau etichete non-ierarhice.

Termenii, pe de altă parte, sunt definiți ca:

În WordPress, un termen este o clasificare, un grup sau un subset al unei taxonomii, unde acesta din urmă poate fi o categorie, o etichetă sau o taxonomie personalizată. În mod prestabilit, termenii au un titlu, un slug și o descriere. Taxonomiile ierarhice precum categoriile pot defini un termen părinte.

În cele din urmă, relația dintre taxonomii și termeni este de așa natură încât nu există într-adevăr fără un altul (în special în taxonomiile ierarhice). Aceasta înseamnă că o taxonomie de categorie trebuie să aibă cel puțin un termen asociat cu aceasta; totuși, taxonomiile non-ierarhice nu trebuie neapărat să o urmeze.

Cu acest lucru, să începem să lucrăm cu API-ul Metadata cu termeni.

Lucrul cu API

Ca și celelalte API-uri de metadate disponibile, vom putea să facem lucruri precum:

  • adăuga
  • Actualizați
  • recupera
  • șterge

Și pentru că acesta este un nou API, s-ar putea să nu fie clar imediat ce sunt avantajele acestui API. Deși vom explora doar câteva dintre elementele de bază ale acestui articol, merită luate în considerare doar câteva dintre lucrurile pe care le putem face.

De exemplu:

  • Asociați culori sau imagini cu un termen
  • Restricționați anumite postări care aparțin unui termen
  • Adăugați date binare, cum ar fi documente sau PDF-uri, pentru un termen care poate fi pus la dispoziție pe front-end
  • … și altele.

Desigur, există mai multe posibilități. Dar, pentru moment, să vedem cum putem încorpora acest lucru în munca noastră.

Pregătirea temei

Pentru a începe, să ne asigurăm că suntem pe aceeași pagină cu privire la ceea ce vom folosi pentru a face acest lucru. Mai exact, iată ce aveți nevoie și iată ce folosesc.

  • un IDE - voi folosi atomul
  • un front-end de baze de date - voi folosi Sequel Pro
  • o versiune de WordPress - voi folosi WordPress 4.4.2
  • o temă de bază - voi folosi 20 de ani

Odată ce ați pregătit toate acestea, vom fi gata să mergem. Dacă aveți nevoie de ajutor pentru a vă crea un mediu de dezvoltare, vă rugăm să consultați această serie de articole.

Noțiuni de bază

Primul lucru pe care trebuie să-l facem este să creați un fișier care să conțină toată munca pe care o vom face în acest tutorial.

În primul rând, trebuie să creăm tutsplus-termen-metadata.php în rădăcina două mii șaisprezece director temă.

Apoi, trebuie să adăugăm următoarea linie de cod la fișierul functions.php al temei. Acest lucru ne va asigura că includem munca noastră în temă.

Când reîncărcați browserul, ar trebui să vedeți ceva asemănător cu următoarea imagine:

Nu trebuie să existe nicio eroare și ar trebui să funcționeze ca și cum nimic nu s-ar fi schimbat. În cele din urmă, dacă lucrați cu o instalare proaspătă de WordPress, termenul de metadate ar trebui să arate complet gol:

Apoi, pentru a vă asigura că avem o categorie cu care lucrăm, continuați și creați o nouă categorie în instalarea dvs. WordPress. Am de gând să creez unul chemat Principal și asigurați-vă că Salut Lume este ștampilată cu acest lucru.

După ce ați terminat, aruncați o privire la tabelul cu termeni din baza de date pentru a obține term_id. În cazul meu, term_id este 2. A ta poate varia, însă ideea este că știi acel cod al termenului în cauză:

Luați notă pe măsură ce vom folosi acest lucru în tot tutorialul.

Adăugarea de metadate

Pentru a începe, este important să recunoașteți acest lucru add_term_meta funcția poate servi două scopuri:

  1. Funcția poate crea valori non-unice asociate cu un singur ID de termen și cu o singură cheie meta.
  2. Funcția poate crea valori unice asociate cu un singur ID de termen și cu o singură cheie meta.

Funcția acceptă un ID de termen, o cheie meta, o valoare meta și o valoare booleană opțională care determină dacă valoarea stocată este sau nu unică.

Valori unice

Mai întâi, să creăm o valoare unică în baza de date. Introduceți codul următor în editorul dvs., actualizați Salut Lume, și apoi vizualizați termmeta masa. 

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value', true);  retur $ conținut;  

Ar trebui să vă vedeți informațiile.

Dacă modificați valoarea meta și actualizați pagina, ar trebui să observați că valoarea din baza de date are nu schimbat. Acest lucru se datorează faptului că ați spus că aceasta ar trebui să fie o valoare unică și că prima valoare scrisă nu va fi modificată sau suprascrisă. 

Acest lucru se poate realiza cu update_term_meta, dar vom examina momentan codul respectiv.

Valori non-unice

Înainte de a examina modul în care putem actualiza termenul meta, totuși, să ne uităm la modul în care putem adăuga mai multe valori în aceeași cheie meta și același cod de termen. Codul de mai jos arată similar codului de mai sus, cu excepția faptului că nu mergem corect în funcție.

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

Reîmprospăta Salut Lume de câteva ori și apoi aruncați o privire la baza de date. Ar trebui să vedeți ceva de genul:

Are sens? Practic, atunci când spuneți că doriți să aveți o valoare unică, prima valoare pe care o introduceți va persista ca numai valoare (dacă nu o actualizați sau o ștergeți). 

Dacă, pe de altă parte, nu specificați că doriți să fie o valoare unică, atunci puteți stoca cât mai multe valori după cum doriți cu ID-ul termenului și tasta meta.

Acest lucru, totuși, duce la obținerea de informații și la ștergerea informațiilor în mod diferit față de baza de date; vom examina acest lucru mai detaliat mai târziu în articol.

Actualizarea metadatelor

Funcția API update_term_meta ne oferă o serie de opțiuni frumoase. În primul rând, ne dă posibilitatea de a adăuga o intrare unică, unică în baza de date fără a fi nevoie să folosim al patrulea parametru din add_post_meta.

În al doilea rând, ne permite să actualizăm o anumită piesă de metadate, atâta timp cât știm care este valoarea precedentă. Să aruncăm o privire la ambele cazuri, dat fiind starea actuală a bazei noastre de date.

Adăugarea datelor unice

Pentru a adăuga metadate unice, putem face un apel foarte asemănător cu ceea ce am văzut în primul exemplu add_term_meta. În schimb, de data aceasta, vom folosi update_term_meta. De exemplu, examinați următorul cod:

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value');  retur $ conținut; 

Reîmprospăta Salut Lume de câteva ori și indiferent de câte ori o reîmprospătați, veți vedea o singură valoare introdusă în baza de date. Dacă urmăriți împreună cu codul, atunci ar trebui să vedeți ceva de genul:

Dar ce se întâmplă când există mai multe înregistrări cu aceeași cheie meta și vrem să le actualizăm?

Actualizarea unei înregistrări non-unice

Pentru a actualiza o înregistrare care are același nume de termen și aceeași cheie meta, este important să cunoașteți valoarea anterioară. În cazul nostru, știm că avem o valoare numită my_meta_value_1

În acest scop, putem actualiza acest rând specific prin specificarea noii valori și a valorii vechi în update_term_meta funcţie. Pentru a face acest lucru, aruncați o privire la următorul cod:

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1');  retur $ conținut; 

Și apoi reîmprospătați Salut Lume. După ce ați terminat, valoarea meta actualizată ar trebui să arate astfel:

Dacă nu vedeți același rezultat, asigurați-vă că ați specificat corect numele corect al funcției în cârlig, ID-ul termenului de scriere, tasta meta-dreapta și valoarea meta anterioară potrivită.

Preluarea metadatelor

Pentru a obține metadatele pe care le-am recuperat, putem folosi get_term_meta funcţie. 

Rețineți, totuși, că atunci când preluăm metadatele de termen, este posibil să avem de-a face cu o cheie meta care are câteva valori asociate cu aceasta. Sau poate că avem de-a face cu o cheie meta care are doar o singură valoare.

În funcție de situație, va trebui să specificăm diferite informații despre funcție. 

Preluarea tuturor metadatelor

Preluarea tuturor metadatelor asociate unui singur termen este ușoară, așa cum arată codul de mai jos. Lucrul cheie care trebuie acordat atenției este că rezultatele sunt returnate într-o matrice. 

În exemplul de mai jos, vom folosi non_unique_key ca meta-cheie, deoarece are mai multe valori asociate cu ea.

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key');  retur $ conținut; 

Puteți opta pentru a econa rezultatele pe ecran, puteți alege să utilizați var_dump sau puteți alege să utilizați un program de depanare pentru a vizualiza informațiile. Indiferent de situație, ar trebui să vedeți ca rezultate rezultatele următoare:

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

Având în vedere această ieșire, puteți opta să o stocați într-o variabilă și apoi să preluați o anumită valoare dintr-un index dat. Sau poate ați opta să faceți buclă prin intermediul datelor și să o citiți sau să o manipulați.

Indiferent de cazul dvs. de utilizare, acesta este modul în care puteți prelua toate informațiile asociate cu o cheie meta.

Preluarea unei singure bucăți de metadate

Când vorbim despre preluarea unei singure bucăți de metadate, în mod normal, înseamnă că încercăm să obținem o înregistrare de la mai multe (ca în exemplul nostru de mai sus); cu toate acestea, pot exista cazuri în care dorim să preluăm o singură valoare meta asociată cu o singură cheie meta.

Vom vorbi despre cazul ulterior într-o clipă. Dar, mai întâi, să acoperim cazul în care dorim să preluăm o singură valoare dintr-un set de date care are același nume de termen și aceeași cheie meta.

Observați în codul de mai jos, trecem o a patra valoare, Adevărat:

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true);  retur $ conținut; 

Și iată ce se întoarce:

șir (15) "my_meta_value_0"

Rețineți că aceasta returnează prima valoare pe care o găsește și o face în formă de șir.

Dacă există doar o înregistrare?

Dacă există doar o înregistrare, atunci aveți două opțiuni:

  1. Puteți prelua informațiile fără a specifica Adevărat.
  2. Puteți prelua informațiile specificând Adevărat.

Dacă optați pentru primul caz, atunci veți reveni la o matrice cu un singur index și o singură valoare. Ca atare, va trebui să luați valoarea din rezultat făcând ceva de genul $ value = $ rezultat [0] presupunând că stocați rezultatul apelului funcției $ rezultat.

Pe de altă parte, dacă optați pentru a doua opțiune, atunci vă puteți aștepta ca rezultatul să vă fie returnat ca a şir.

În mod evident, cel mai important lucru pe care trebuie să-l menționăm în abordarea valorilor acestei strategii particulare este acela că valorile sunt unice având în vedere meta-cheie.

Ștergerea metadatelor

În cele din urmă, trebuie să aruncăm o privire la eliminarea metadatelor asociate. Și, ținând cont de restul exemplelor noastre, aceasta depinde de existența mai multor piese de metadate asociate unei meta-cheie sau a unei singure valori meta asociate cu o cheie meta.

Ștergerea tuturor înregistrărilor

Dacă știți că există o singură cheie meta care are mai multe valori asociate cu aceasta, atunci puteți folosi următorul cod:

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key');  retur $ conținut;  

Și aceasta va actualiza tabela de baze de date astfel încât să arate astfel:

Dacă ați urmărit, atunci știți că acest lucru a eliminat toate datele asociate cu non_unique_key meta-cheie.

Ștergerea unei înregistrări unice

Dacă doriți să ștergeți o singură înregistrare, atunci există două modalități de a face acest lucru:

  1. Cunoașteți valoarea meta asociată tastei meta pe care doriți să o ștergeți.
  2. Valoarea asociată cu tasta meta specificată este unică prin faptul că meta-cheie și valoarea meta sunt unice.

În acest scop, vom arunca o privire la primul exemplu din această secțiune și vom arunca o privire la al doilea exemplu din această secțiune.

Pentru a șterge o singură înregistrare în care știm valoarea meta asociată, putem scrie cod care specifică atât meta-cheie, cât și valoarea meta. De exemplu:

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value');  retur $ conținut; 

Aceasta va elimina rândul asociat cu aceste informații din baza de date.

Ștergerea unei înregistrări unice

În cele din urmă, dacă există o singură înregistrare unică în care cunoașteți cheia meta, dar nu cunoașteți valoarea meta, atunci puteți șterge acea înregistrare din baza de date.

Tot ce trebuie să specificați în codul sursă este cheia meta. Consultați următoarea funcție:

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key');  retur $ conținut; 

Cititorii apreciați probabil vor prinde că funcția de mai sus este aceeași definiție a funcției pe care am furnizat-o când ștergem înregistrări care au toate valorile multiple. Și asta pentru că ei sunteți la fel.

Diferența, totuși, este scop a funcției. O intenție a unei funcții va conduce adesea modul în care numim funcția. În cazul anterior, am vrut să ștergem toate metadatele termenului. În acest caz, am vrut să ștergem o singură piesă de metadate termen.

Acest lucru are implicații atunci când vine vorba de scrierea codului de calitate și când vine vorba de scrierea testelor de unitate.

Codul sursă integrală

Aici veți găsi tot codul pe care l-am folosit pe parcursul acestei postări, împreună cu comentarii suplimentare care explică ce se întâmplă în cod. Amintiți-vă că toate aceste funcții sunt legate continutul, ceea ce înseamnă că funcțiile se vor declanșa de fiecare dată când postul este încărcat.

Ca atare, add_filter apelurile sunt comentate astfel încât să le puteți activa după cum este necesar.

term_id; dacă 1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value_changed', true);  retur $ conținut;  // add_filter ('the_content', 'tutsplus_add_term_metas'); / ** * Dacă suntem în prima postare și în categoria având * ID de '2', atunci adăugăm mai multe valori meta cu aceeași meta cheie meta date. * * @ param string $ content Conținutul mesajului. * @ string retur Conținutul mesajului. * / funcția tutsplus_add_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> termen_id; dacă (1 === get_the_ID () && 2 === $ term_id) pentru ($ 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; dacă 1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value');  retur $ conținut;  // add_filter ('the_content', 'tutsplus_update_term_metas'); / ** * Actualizează valoarea existentă pentru metadatele care au tasta meta "non_unique_key" * cu valoarea meta specificată. Acest lucru se întâmplă numai dacă suntem pe postul * cu codul unuia și are ID-ul categoriei de "2". * * @ param string $ content Conținutul mesajului. * @ string retur Conținutul mesajului. * / funcția tutsplus_update_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> termen_id; dacă 1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1');  retur $ conținut;  // add_filter ('the_content', 'tutsplus_get_term_metas'); / ** * Dacă suntem în prima postare și postul are ID-ul categoriei de '2', atunci * extragem termenul meta sub forma unui matrice. * * @ param string $ content Conținutul mesajului. * @ string retur Conținutul mesajului. * / funcția tutsplus_get_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> termen_id; dacă 1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key');  retur $ conținut;  // add_filter ('the_content', 'tutsplus_get_term_meta'); / ** * Dacă suntem în prima postare și postul are ID-ul categoriei de '2', atunci * primește prima valoare din metadate ca un șir. * * @ param string $ content Conținutul mesajului. * @ string retur Conținutul mesajului. * / funcția tutsplus_get_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> termen_id; dacă 1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true);  retur $ conținut;  // add_filter ('the_content', 'tutsplus_delete_term_metas'); / ** * Dacă suntem în prima postare și postarea are ID-ul categoriei de '2', atunci * șterge valorile meta asociate cheii indicate. * * @ param string $ content Conținutul mesajului. * @ string retur Conținutul mesajului. * / funcția tutsplus_delete_term_metas ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> termen_id; dacă 1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key');  retur $ conținut;  // add_filter ('the_content', 'tutsplus_delete_term_meta'); / ** * Dacă suntem în prima postare și postarea are ID-ul categoriei de "2", atunci * șterge valoarea meta specificată asociată meta-cheie specificată. * * @ param string $ content Conținutul mesajului. * @ string retur Conținutul mesajului. * / funcția tutsplus_delete_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> termen_id; dacă 1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value');  retur $ conținut;  // add_filter ('the_content', 'tutsplus_delete_single_term_meta'); / ** * Dacă suntem în prima postare și postarea are ID-ul categoriei de '2', atunci * șterge valorile meta asociate cheii indicate. * * @ param string $ content Conținutul mesajului. * @ string retur Conținutul mesajului. * / funcția tutsplus_delete_single_term_meta ($ content) $ category = get_the_category (); $ term_id = $ categorie [0] -> termen_id; dacă 1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key');  retur $ conținut;  

Nu e deloc neobișnuit să găsești funcții de genul asta legate într-un alt cârlig save_post sau ceva similar. Acesta este un lucru pe care îl vom acoperi mai detaliat într-un tutorial avansat mai târziu în acest an.

Concluzie

Pentru cei care au urmat această serie și seria precedentă care lucrează cu restul API-urilor de metadate, o mare parte din materialele acoperite în această serie nu ar trebui să fie prea greu de înțeles.

Poate că cea mai dificilă parte a colaborării cu acest API este exercitarea creativității pe multe moduri în care poate fi efectiv utilizat. Dar din moment ce ne-am acoperit Cum pentru a lucra cu API, punerea lui la lucru nu ar trebui să fie foarte greu.

Amintiți-vă că în următoarele săptămâni vom analiza tehnicile avansate și adecvate pentru scrierea și citirea informațiilor în baza de date, astfel încât să putem lucra cu ei într-un mediu de producție.

Între timp, dacă sunteți în căutarea pentru alte utilități pentru a vă ajuta să construi setul tot mai mare de instrumente pentru WordPress sau de cod pentru a studia și de a deveni mai bine versat în WordPress, nu uitați să vedem ce avem la dispoziție în Envato Piaţă.

Amintiți-vă că puteți prinde toate cursurile și tutorialele mele pe pagina mea de profil și puteți să mă urmați pe blogul meu și / sau pe Twitter la @tommcfarlin unde vorbesc despre diverse practici de dezvoltare software și cum le putem angaja în WordPress.

Nu ezitați să lăsați orice întrebări sau comentarii în feed-ul de mai jos și mă voi adresa fiecăruia.

Resurse conexe

  • câmpuri customizate
  • get_the_category
  • add_term_meta
  • update_term_meta
  • get_term_meta
  • delete_term_meta
  • ecou
  • var_dump
Cod