Cum se lucrează cu WordPress Post Metadata

În primul post din această serie, am dat o imagine de ansamblu asupra tuturor diferitelor tipuri de metadate oferite de WordPress, unde este păstrat și ce vom acoperi pe parcursul acestei serii. 

Mai mult, am definit ce metadate este; rolul său în WordPress și modul în care este relevant pentru noi ca dezvoltatori. Dar introducerea trebuia să fie doar: un sondaj despre ceea ce vom acoperi pe parcursul întregii serii.

Începând cu acest post, vom începe să explorăm API-ul WordPress Post Meta pentru a vedea de ce este util, ce putem face cu acesta și cum să profităm de metodele oferite prin intermediul aplicației WordPress.

O declarație de răspundere pentru toți

În primul rând, dacă sunteți un dezvoltator avansat, atunci nu este probabil ca această serie de tutoriale să vă ajute mult. În schimb, este îndreptată mai mult spre cei care au lucrat puțin cu temele, probabil au modificat un cod de plugin și sunt gata să-l facă un pas mai departe prin adăugarea unor informații suplimentare posturilor (sau tipurilor de post) care le compun.

În al doilea rând, rețineți că exemplele de cod din acest tutorial sunt nupentru utilizarea într-un mediu de producție. În schimb, codul pe care îl vom privi nu este destinat să fie folosit oriunde pe care cineva are acces public la site.

Chiar acum, am de gând să acopere mai multe tehnici avansate pentru acest subiect după ce ne-am străduit drumul prin această serie. Dar pentru moment, ne vom ocupa doar de colaborarea cu API.

De ce totuși? Care este întârzierea în acoperirea informațiilor suplimentare? Pur și simplu pune, are de a face cu securitatea site-ului web. Mai exact, ori de câte ori scriem informații în baza de date, trebuie să presupunem că datele nu sunt într-un format care să fie în siguranță pentru noi; trebuie să dezinfectăm datele.

Există un set complet diferit de API-uri pentru dezinfectarea datelor pe care trebuie să le explorăm, care vor funcționa împreună cu API-urile metadatelor, dar acest lucru nu este un tutorial pentru a face acest lucru.

Știu, s-ar putea să fie puțin frustrant să vorbim despre aceste API-uri fără a putea să le folosim. Amintiți-vă, totuși, aceasta este o introducere în API. Tutorialele ar trebui să furnizeze suficiente informații pentru a începe să lucrați cu metadatele postate pe mașina dvs., dar ar trebui să lasați, de asemenea, suficiente întrebări, astfel încât să putem face o scufundare mai profundă în subiect într-o serie viitoare de articole.

Cu asta a spus, să mergem mai departe și să începem cu WordPress Post Meta API. Și fi avertizat: Acesta este un tutorial lung.

O introducere în API

Înainte de a ne uita la cod, este important să vă asigurați că aveți instrumentele necesare pentru a naviga în baza de date pe care rulează instalarea dvs. WordPress. Unele dintre instrumentele disponibile includ:

  • phpMyAdmin
  • Sequel Pro
  • MySQL Workbench
  • Adminer

Dar nu ezitați să folosiți ceea ce vă place cel mai mult. Atâta timp cât puteți vizualiza datele din baza de date, sunteți gata să mergeți.

Apoi, să înțelegem modul în care WordPress definește metadatele postate. Conform Codului:

WordPress are capacitatea de a permite autorilor posturilor să atribuie câmpuri personalizate unei postări. Această informație suplimentară arbitrară este cunoscută sub numele de meta-date.

Meta-datele sunt manipulate cu perechi cheie / valoare. Cheia este numele elementului metadata. Valoarea reprezintă informațiile care vor apărea în lista metadatelor pentru fiecare post individual la care sunt asociate informațiile.

În termeni simpli, WordPress ne permite să scriem informații personalizate în baza de date, să o asociem cu orice post pe care îl dorim și apoi să îl preluăm după cum este necesar. În plus, informațiile sunt stocate utilizând perechi cheie cheie / valoare.

Scrierea propriilor metadate

Dacă asta ți se pare străin, nu te îngrijora nici măcar de asta. Ideea este că pentru fiecare valoare pe care o stocați este legată de o cheie unică (la fel ca un chei de chei care are o cheie unică pentru ao debloca). 

Cheia este modul în care putem extrage valoarea din post. Dar aceasta ridică o întrebare: Ce se întâmplă dacă un post are mai multe fragmente de metadate asociate cu acesta? Adică, dacă un post dat poate avea mai multe fragmente de metadate stocate alături de el, cum putem prelua metadate unice?

După cum vom vedea când vom începe să ne uităm la exemplele de mai jos, pe lângă utilizarea cheii folosite la stocarea datelor, trebuie să trecem și funcția de identificare unică a postului.

Nimic nu funcționează mai bine decât să-l vadă în acțiune. Deci, presupunând că ați instalat WordPress pe mașina dvs. locală și că sunteți în regulă cu editarea functions.php în centrul temei implicite, să începem.

Pentru trimitere

Voi folosi următoarele instrumente:

  • WordPress 4.4
  • Tema twentiesprezece
  • Atom
  • Sequel Pro

Cel mai important lucru este că rulați atât WordPress, cât și tema menționată mai sus.

În cele din urmă, dacă vă simțiți mai confortabil cu un alt IDE și front-end de baze de date, este perfect.

Am acoperit o mulțime de informații în introducerea acestui articol, dar va fi utilă pentru că vom începe să ne uităm nu numai la API-ul Post Meta, ci și la celelalte API-uri. Așa că păstrați mintea. Mă refer la acest articol special și în articolele viitoare.

Hai să intrăm în API.

O notă foarte importantă

Modul în care vom încorpora codul este nu modul profesional de a face schimbări în tema dvs., de a implementa această funcție sau de a interfața cu un API. Facem acest lucru pentru primii pași ai unui începător în dezvoltarea WordPress. 

Într-o serie de follow-up, vom prelua munca pe care am făcut-o în această serie și o vom extrage într-un plugin mai sustenabil, care include și un accent mai mare pe mentenabilitate, securitate și multe altele.

Pentru moment, ne concentrăm pe elementele de bază ale API-ului.

Pregătirea temei

Amintiți-vă că folosesc o instalare de bază a WordPress împreună cu tema twentiesprezece pentru demonstrațiile pe care le vom vedea pe parcursul acestui tutorial și celelalte tutoriale din serie.

În al doilea rând, vom face schimbări functions.php. Acesta nu este, de obicei, cel mai bun loc pentru a face această schimbare; totuși, vă rugăm să vă asigurați că ați citit nota de mai sus înainte de a continua.

Cu asta a spus, să presupunem că aveți serverul dvs. care rulează, IDE dvs. sus și gata, și functions.php în editorul tău. Deși captura de ecran poate părea un pic diferită, ar trebui să semene cu aceasta:

Provocarea cu care lucrați functions.php este că este deja plin de cod care ajută la alimentarea temei existente. Deși, în cele din urmă, vom muta codul nostru într-un plugin într-o serie viitoare, să facem cel puțin primul pas în a face fișierul nostru, astfel încât să ne putem autocontina codul.

Folosind IDE-ul ales:

  1. Creați un fișier nou în directorul rădăcină al temei twentiesprezece.
  2. Denumiți fișierul tutsplus-metadata.php.

După ce ați terminat, ar trebui să aveți ceva de genul acesta în sistemul dvs. de fișiere:

În cele din urmă, trebuie să ne asigurăm că includem acest lucru în functions.php. Pentru aceasta, adăugați următoarea linie de cod chiar sub eticheta PHP de deschidere. 

Reîncărcați browserul. Dacă totul merge bine, ar trebui să vedeți tema exact așa cum a fost înainte de a adăuga fișierul dvs. la functions.php

Acum, să mergem la muncă.

Noțiuni de bază

Reamintim discuția noastră anterioară că avem nevoie de trei lucruri pentru a adăuga metadate la baza de date:

  1. un ID post
  2. o cheie unică cu care putem identifica metadatele
  3. o valoare cu care vom stoca pe care vrem să o recuperăm mai târziu

Pentru acest tutorial, tot ce ne face să facem este să adăugăm metadate care vor apărea în mod implicit Salut Lume! post care vine standard în fiecare instalare de WordPress.

Să spunem că vrem să adăugăm câteva metadate care includ numele nostru. Deci cheia meta pe care o vom folosi este numele meu iar valoarea pe care o vom folosi este oricare ar fi numele tău. În cazul meu, este "Tom McFarlin".

Primul lucru pe care vrem să-l facem este să definim o funcție în care se cuplează continutul. Acest lucru ne va permite să ieșim din textul nostru atunci când funcționează funcția. Dacă nu sunteți familiarizat cu cârligele, vă rugăm să citiți această serie.

Codul dvs. inițial ar trebui să arate astfel:

Când executați acest cod, șirul "[Suntem aici.") Ar trebui să apară deasupra conținutului postului înainte de orice altceva și ar trebui se întâmplă numai pe Salut Lume! post. Acest lucru se datorează faptului că verificăm să ne asigurăm că ID-ul este 1 înainte de noi ecou șirul.

Rețineți că versiunea finală a codului distribuit la sfârșitul acestei postări va fi completată cu comentarii. Până atunci, voi explica ce face codul, adăugând fiecare piesă nouă în codul nostru.

Adăugarea de metadate

Acum, să adăugăm câteva metadate reale. Pentru a face acest lucru, adăugați acest cod în corpul condiționalului, astfel încât suntem siguri că facem acest lucru Salut Lume. Deoarece deja verificăm ID-ul de 1 în condiționată, atunci putem elimina codul pe care l-am adăugat în secțiunea anterioară și îl putem actualiza.

În corpul condiționalului, vom apela la add_post_meta Funcția API care arată astfel:

Ar fi bine dacă am putea face ceva cu aceste informații. Înainte de a face acest lucru, totuși, avem mai multe informații pe care trebuie să le acoperim. Este vorba despre actualizarea metadatelor (și a modului în care acestea diferă de adăugarea metadatelor) împreună cu unele nuanțe pe care nu vă puteți aștepta atunci când vă ocupați de API.

Actualizarea metadatelor

Există o diferență subtilă între adăugarea metadatelor și actualizarea metadatelor. Știți cum o cheie identifică în mod unic o valoare asociată cu ea? Păi, asta este parțial corect.

Când sunați add_post_meta, creați o intrare de fiecare dată când faceți acest apel. Deci, în codul de mai sus, dacă actualizați pagina de trei ori, atunci veți vedea ceva de genul:

Curios, nu? Amintiți-vă ce spune Codul:

Rețineți că, dacă cheia dată există deja între câmpurile personalizate ale postării specificate, se adaugă un alt câmp personalizat cu aceeași cheie, cu excepția cazului în care argumentul $ unic este setat la adevărat, caz în care nu se fac modificări.

Există un parametru opțional pe care funcția îl acceptă. E un boolean chemat $ unic, și ne permite să trecem Adevărat dacă vrem doar să ne asigurăm că valoarea adăugată este unică.

Poate doriți să ștergeți înregistrările existente în acest moment. Dacă nu, este bine - utilizați doar o valoare diferită pentru numele meu cheie.

Aceasta înseamnă că am putea actualiza codul nostru pentru a arăta astfel:

Acum, creați o singură intrare. În plus, dacă ați încerca să modificați valoarea acelei chei în cod, atunci ar fi nu să fie suprascris în baza de date. Odată ce ați scris metadatele postului sunt complete, acestea sunt stocate pentru prima oară.

Dar nu trebuie să fie așa și acolo update_post_meta intră în joc. De fapt, update_post_meta ar putea fi utilizate mai mult decât add_post_meta, în funcție de cazul dvs. de utilizare.

Înainte de a vă uita la cod, verificați ce trebuie să spună Codex-ul:

Funcția update_post_meta () actualizează valoarea unei meta chei existente (câmpul personalizat) pentru postarea specificată.
Aceasta poate fi folosită în locul funcției add_post_meta (). Primul lucru pe care o va face această funcție este să vă asigurați că $ meta_key există deja pe $ post_id. Dacă nu, se apelează add_post_meta ($ post_id, $ meta_key, $ meta_value) și rezultatul său este returnat.

Ai prins asta? Poate fi folosit în locul lui add_post_meta", ceea ce este util pentru că înseamnă:

  1. Dacă metadatele postate există deja pentru o cheie dată,
  2. Dacă utilizați update_post_meta,
  3. Veți suprascrie valoarea anterioară.

În acest moment, poate doriți să ștergeți informațiile din baza dvs. de date sau să creați o nouă pereche de chei și valori. Aceasta înseamnă că putem actualiza codul nostru pentru a arăta astfel:

Acest lucru aduce totuși pericole inerente cu acesta. 

Anume, dacă suprascrieți o valoare pe care niciodată nu ați intenționat să o înlocuiți, atunci acea valoare a dispărut și nu poate fi recuperată (cu excepția cazului în care faceți o lucrare mai apreciată care nu se încadrează în această serie).

Există un argument final opțional pentru update_post_meta, deși, și asta e $ prev_value argument. Adică, puteți specifica valoarea pe care doriți să o înlocuiți.

Luați, de exemplu, cazul în care aveți mai multe înregistrări cu aceeași cheie creată cu add_post_meta și doriți să actualizați numai una dintre aceste înregistrări. Pentru a actualiza aceste date, ați trece valoarea corespunzătoare acelei înregistrări.

Care este diferența?

Diferența dintre add_post_meta și update_post_meta poate fi considerată subtilă, dar depinde de cazul dvs. de utilizare. 

Voi încerca să le distrug cât mai mult posibil, pentru că, deși poate părea complicată având în vedere exemplele pe care le-am văzut mai sus, este mai simplu atunci când puneți totul.

  • add_post_meta este util atunci când doriți să introduceți o înregistrare în baza de date. Dacă valoarea există deja, atunci noua valoare poate fi sau nu poate fi scrisă. Dacă treceți Adevărat pentru $ unic parametru al funcției, atunci va fi creată numai prima înregistrare și nimic va suprascrie asta cu exceptia update_post_meta.
  • update_post_meta pot fi utilizate în locul add_post_meta și va suprascrie întotdeauna valoarea anterioară care a existat. Dacă lucrați cu mai multe înregistrări create de add_post_meta, atunci poate fi necesar să specificați o valoare anterioară pe care doriți să o înlocuiți.

Și asta e tot. Desigur, trebuie să ne ocupăm de extragerea înregistrărilor din baza de date și de afișarea acestora pe ecran.

Preluarea metadatelor

Când vine vorba de preluarea metadatelor post, există două lucruri principale pe care trebuie să le țineți minte:

  1. Metadatele pot fi preluate ca un șir.
  2. Metadatele pot fi preluate ca o matrice.

Uneori depinde de modul în care ați stocat informațiile originale; alteori se bazează pe modul în care doriți să lucrați cu el.

Înainte de a examina diferitele moduri în care putem recupera informațiile, să analizăm mai întâi apelul API de bază pentru a face acest lucru. Mai exact, vorbesc despre asta get_post_meta. Dacă ați urmat până acum, înțelegerea API ar trebui să fie relativ ușoară.

Funcția acceptă trei parametri:

  1. ID-ul postului
  2. cheia metadatelor
  3. o valoare booleană opțională pentru dacă doriți să extrageți valoarea ca un șir sau ca o matrice (unde un matrice este valoarea implicită dacă nu este specificat nimic)

Din Codul:

Preluați câmpul meta post pentru o postare. Va fi un matrice dacă $ single este falsă. Va fi valoarea câmpului meta date dacă $ single este adevărată.

Pare destul de ușor. Deci, dat fiind faptul că ultimul bit al codului nostru sursă se află chiar acum, aș spune că putem recupera informații făcând un apel ca get_post_meta (get_the_ID (), 'my_name');.

Codul, așa cum reiese mai sus, va returna o matrice. 

Valori multiple

Ori de câte ori auziți expresia "mai multe valori", poate fi util să vă gândiți la o matrice sau la un tip de colectare a datelor în limba de programare pe care o utilizați.

În exemplele noastre, gândiți-vă când folosim aceleași chei de mai multe ori add_post_meta. Ca o reîmprospătare, a fost cum arată baza de date:

Dacă trebuia să recuperez informația cu cheia, ce-aș putea să mă întorc? Din moment ce nu am precizat că vreau un șir, aș primi o serie de înregistrări. Acest lucru mi-ar permite să repet prin fiecare dintre ele.

Dacă, pe de altă parte, ar trebui să precizez adevărat că doream să primesc un șir, atunci aș obține doar primul rând care a fost creat utilizând add_post_meta.

În acest scop, dacă doriți să obțineți mai multe valori pentru o cheie dată, atunci codul dvs. ar arăta astfel:

Rețineți că folosesc var_dump pentru a face mai ușor să vedeți ce informații se întorc din WordPress în browser; cu toate acestea, eu sunt mai mult de un fan al utilizării unui depanator, care este ceva pe care îl putem discuta într-un post viitor. 

Valorile unice

Acum, să spunem că doriți să obțineți valori unice stocate pentru o postare. În acest caz, aveți încă nevoie de ID-ul postului și de cheia metadatelor; cu toate acestea, va trebui să oferiți Adevărat ca al treilea parametru la get_post_meta.

După cum sa menționat mai sus, dacă aveți de-a face cu o situație în care au fost create mai multe rânduri add_post_meta, atunci veți reveni la primul rând care a fost creat; cu toate acestea, dacă utilizați această funcție alături update_post_meta atunci veți primi o valoare de șir a datelor stocate.

Din moment ce am acoperit primul, dar nu l-am acoperit pe acesta din urmă, iată cum arată codul:

Apoi, veți primi din nou orice valoare pe care ați salvat-o ca valoare meta atunci când efectuați un apel la funcție. Este destul de simplu în comparație cu a avea de a lucra cu un set de înregistrări și tablouri care pot conține sau nu informații similare.

Ștergerea metadatelor

Ultimul lucru de a lucra cu metadatele post are tot de-a face cu posibilitatea de ao șterge. Este ușor, dar există doar câteva nuanțe pe care trebuie să le înțelegem pentru a ne asigura că o facem în mod eficient.

Dar mai întâi, iată definiția din Codul:

Această funcție șterge toate câmpurile personalizate cu cheia specificată sau tasta și valoarea din postarea specificată. 

Scurt, dulce și până la punct. Funcția acceptă trei argumente:

  1. ID-ul postului
  2. cheia meta
  3. valoarea meta

Valoarea meta este opțională, dar vine la îndemână dacă ați lucrat cu ea add_post_meta și doriți să ștergeți una dintre intrările specifice create de mai multe apeluri la acea funcție (așa cum am văzut în altă parte în acest tutorial).

Deși apelează la delete_post_meta este la fel de simplu ca și transmiterea unui ID post, a meta-cheie și a meta-ului opțional, funcția returnează o valoare booleană care precizează dacă datele au fost sau nu eliminate.

Codul de exemplu pentru ștergerea unor metadate postate pe care le-am vizionat până acum ar putea să arate astfel:

Cu toate acestea, implementarea dvs. poate varia. Dacă lucrați cu mai multe fragmente de metadate și dacă doriți să verificați dacă a fost o ștergere reușită, atunci puteți împacheta codul într-o condiție.

Un exemplu final de cod

Mai jos veți găsi un fragment de cod lung și documentat care ar trebui să reprezinte majoritatea a ceea ce am vorbit în acest tutorial. Rețineți că funcțiile se blochează continutul.

Acest lucru este doar pentru scopuri demonstrative, astfel încât să puteți declanșa cu ușurință arderea acestor funcții ori de câte ori încărcați o anumită pagină.

De obicei, veți găsi funcții de metadate asociate cu alte cârlige, cum ar fi save_post și operații similare, dar acesta este un subiect pentru o muncă mai avansată. Poate că vom acoperi asta într-o altă serie în cursul acestui an.

Concluzie

Fiecare dintre funcțiile API este disponibilă în WordPress Codex, așa că dacă doriți să faceți înainte și să citiți ceva înainte de următorul articol din serie, atunci nu ezitați să faceți acest lucru.

După cum sa menționat anterior, aceasta este o introducere în WordPress Post Meta API. Prin informațiile furnizate în Codex, în acest tutorial și în codul sursă furnizat, ar trebui să puteți începe să scrieți conținut suplimentar la baza de date referitoare la fiecare dintre postările dvs..

Amintiți-vă, totuși, acest lucru este destinat scopurilor demonstrative, deoarece avem mai multe informații pe care să le acoperim. Mai precis, trebuie să examinăm sanitizarea datelor și validarea datelor. Deși avem mai multe subiecte care să ne acopere mai întâi (cum ar fi metadatele utilizatorilor, metadatele de comentariu etc.), vom trece în curând la mai multe teme avansate.

În cele din urmă, încercăm să punem bazele dezvoltatorilor viitori WordPress care să se construiască de la momentul în care avansează și să lucreze la soluții pentru alții, pentru agențiile lor sau chiar pentru proiectele lor.

Cu asta am spus că aștept cu nerăbdare continuarea acestei serii. Amintiți-vă dacă sunteți doar începutul, puteți verifica seria mea cu privire la modul de a începe cu WordPress, care se concentrează pe teme specifice pentru începători WordPress.

Î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

  • câmpuri customizate
  • add_post_meta
  • update_post_meta
  • get_post_meta
  • delete_post_meta
  • Afișați exemple de metode funcționale
  • ecou
  • var_dump
Cod