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:
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.
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.
Î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.
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:
Desigur, există mai multe posibilități. Dar, pentru moment, să vedem cum putem încorpora acest lucru în munca noastră.
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.
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.
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
este2
. 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:
- Funcția poate crea valori non-unice asociate cu un singur ID de termen și cu o singură cheie meta.
- 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 dinadd_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 folosiupdate_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:
- Puteți prelua informațiile fără a specifica
Adevărat
.- 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:
- Cunoașteți valoarea meta asociată tastei meta pe care doriți să o ștergeți.
- 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