Crearea WordPress Meta Boxes mentenabilă Salvare și recuperare

Pe măsură ce vinăm la sfârșitul acestei serii, avem încă două subiecte:

  1. Salvarea informațiilor și recuperarea informațiilor din baza de date
  2. Refactorizând codul astfel încât să devină mai ușor de întreținut pentru noi

În articolul precedent, am analizat validarea, dezinfectarea și implementarea acestei funcționalități pentru elementele pe care le-am afișat pe front-end. În acest articol, vom continua procesul prin salvarea informațiilor în baza de date, prin preluarea informațiilor și prin afișarea lor pe front-end.

Pe parcurs, vom analiza, de asemenea, câteva dintre funcțiile API WordPress încorporate concepute pentru a ușura acest lucru, precum și câteva sfaturi pentru verificarea dublă a activității noastre în baza de date pentru a verifica dacă informațiile noastre sunt salvate exact așa cum ne așteptăm.

Mai avem ceva de făcut pentru a aduce la viață acest plugin, așa că să începem.

Salvarea datelor

Pentru a afișa date pe front-end, este evident că trebuie să ajungem mai întâi în baza de date. Deoarece lucrăm cu meta-boxes, putem folosi funcții care sunt disponibile prin API-ul Meta Box pentru a salva aceste informații.

Mai precis, vom lucra cu următoarele funcții:

  • update_post_meta pentru salvarea informațiilor în baza de date
  • delete_post_meta pentru eliminarea informațiilor din baza de date

Există o altă funcție, add_post_meta, care este, de asemenea, disponibil pentru scrierea de informații în baza de date; in orice caz, update_post_meta face același lucru dacă datele nu există deja în baza de date.

O altă întrebare pe care am văzut-o când vine vorba de ștergerea datelor post-meta este de ce? Adică, ștergeți informațiile mai degrabă decât salvați o valoare goală? 

Puteți argumenta că aceasta este o preferință personală - și este - dar dacă lucrați cu un plugin elaborat care are un număr de câmpuri diferite și câmpurile nu au valoare, atunci este logic să nu mențineți un rând gol.

Mai mult decât atât, dacă absența unei valori nu este semnificativă pentru ceva în interfața cu utilizatorul, atunci nu există nici un motiv să se mențină o valoare goală, întrucât permitem bazei de date să reflecte mai îndeaproape informațiile afișate pe ecran. 

Păstrarea interfeței cu utilizatorul, a codului stratului de aplicație și a bazei de date cât mai consistent posibil este utilă atunci când încercați să scrieți un cod de întreținere. 

Prin urmare, cu acest lucru, să analizăm procesul de salvare a câmpurilor pentru fiecare câmp de intrare.

1. Proiect

Rețineți din postul anterior că Proiect fila conține un singur textarea care este menit să fie un loc pentru autori de a colecta diverse note și adrese URL de pe web care sunt relevante pentru conținutul pe care se pregătesc să le publice.

Când am lăsat ultima dată acest cod, am avut următoarele:

Aici căutăm să vedem dacă conținutul $ _POST matricea este populată. Dacă este cazul, atunci dezinfectăm informațiile folosind tunde și esc_textarea.

În acest moment, suntem gata să-l scriem în baza de date, așa că să înlocuim linia care citește // Urmeaza… cu următorul cod (rețineți că vom examina mai detaliat codul după bloc):

Aici, folosim update_post_meta pentru a adăuga sau actualiza conținutul din baza de date. Rețineți că funcția are trei parametri:

  1. ID-ul postului utilizat pentru a asocia aceste informații cu postarea
  2. O cheie meta folosit pentru a identifica în mod unic valoarea
  3. Valoarea meta reală asociată cu tasta meta

Observați, de asemenea, că, dacă valoarea lui $ _POST matricea este goală, apoi verificăm dacă există este o valoare pentru proiectul din baza de date și, dacă există, îl eliminăm.

2. Resurse

Deoarece am pus deja toată munca la sol pentru dezinfectarea informațiilor și am văzut cum să actualizăm și să ștergem informațiile din baza de date, făcând același lucru și pentru Resurse fila este mai mult la fel.

Singura excepție este că, deoarece avem de-a face cu un set dinamic de informații, trebuie să asociăm dinamic postarea cu un ID unic pe baza numărului de resurse pe care le salvăm.

În postul anterior, codul nostru a arătat astfel:

Când vine vorba de procesarea dinamică a informațiilor, a pentru fiecare buclă funcționează excelent; cu toate acestea, atunci când salvăm informații, trebuie să asociem o cheie unică cu fiecare valoare. 

O opțiune ar fi să configurați o buclă pentru a suge meta cheia cu o cheie unică (prin utilizarea iteratorului pentru fiecare valoare din buclă), dar acest lucru poate provoca probleme când este vorba de ștergerea informațiilor. Mai precis, dacă utilizatorul introduce o valoare pentru prima, a doua și a treia intrare, dar apoi elimină cea de-a doua intrare, lăsând doar prima și a treia când actualizează postul, trebuie să ștergem corect aceste valori goale și să schimbăm corespunzător toate înregistrările.

Acest lucru se poate face într-o serie de moduri diferite, dar este de fapt mai ușor să salvați o singură matrice serializată într-un index unic decât să încercați să faceți ceva fantezist cu rândurile de baze de date, interogările și așa mai departe.

Ca atare, actualizăm codul de mai sus pentru a arăta astfel:

Dacă aruncați o privire în baza de date și vă uitați la această cheie specifică, ar trebui să vedeți ceva similar memorat ca valoare:

a: 3: i: 0; s: 22: "http://tommcfarlin.com"; i: 1; s: 19: "http://tutsplus.com"; i: 2; s: 17:“ http://google.com ";

Vom vedea cum funcționează acest lucru atunci când preluăm informațiile din baza de date mai târziu în acest articol. Rețineți, de asemenea, că trebuie să luăm în considerare cazul când un utilizator a eliminat toate instanțele de resurse.

Așa cum am făcut în prima parte a articolului, pur și simplu ștergem meta datele postului dacă există o valoare. Acest lucru se poate face folosind un cod foarte asemănător:

Acum trebuie să salvăm valorile pentru ultima casetă meta.

3. Publicat

Fila finală a casetei meta, Publicat tabel, va fi cea mai ușoară pentru noi, pentru a ne actualiza, deoarece trage împreună tot ceea ce am privit până acum în articol.

Mai precis, iterăm printr-o colecție de valori, le scriem într-o matrice și apoi serializăm matricea în baza de date. Poate că cel mai important lucru pe care trebuie să-l observăm este că folosim o matrice asociativă și indexăm fiecare valoare cu valoarea codului de comentariu.

Așa cum vom vedea mai târziu în articol, acest lucru va face mult mai ușor să setați valorile pe interfața cu utilizatorul.

 $ comment_value) $ comment = strip_tags (strigătele ($ comment_value)); $ sanitized_comments [$ comment_id] = $ comentariu;  update_post_meta ($ post_id, "autori-comentarii-comentarii", $ sanitized_comments); 

Așa cum am făcut în secțiunea anterioară, dacă nu există nimic specificat în $ _POST array, apoi verificăm existența valorilor din baza de date și, dacă există, le ștergem:

 $ comment_value) $ comment = strip_tags (strigătele ($ comment_value)); $ sanitized_comments [$ comment_id] = $ comentariu;  update_post_meta ($ post_id, "autori-comentarii-comentarii", $ sanitized_comments);  altceva if ("! == get_post_meta ($ post_id," autori-comentarii-comentarii ", true)) delete_post_meta ($ post_id," autori-comentarii-comentarii ");

Așa cum am menționat, acest exemplu final trage totul împreună pe care l-am văzut pentru ultimele două file, așa că ar trebui să fie un cod relativ clar de urmat în acest moment.

Un cuvânt despre baza de date

Înainte de a merge mai departe, hai să facem un moment pentru a înțelege cum putem ajunge la interogarea informațiilor din baza de date. 

Să presupunem că aveți o postare cu ID-ul de 9000 (a ta va varia în funcție de configurația dvs.). Poți să iei acel cod și să te uiți în wp_postmeta tabel pentru a vedea toate informațiile despre meta asociate postării.

În plus, puteți specifica cheia pentru a retrage numai informațiile asociate cu ID-ul postului și cheia.

Dacă specificați doar ID-ul postului, veți vedea toate informațiile despre meta asociate postării. Dacă specificați doar cheia, veți vedea toate codurile postale care conțin conținut pentru schițele lor. Dacă specificați atât ID-ul postului, cât și cheia, veți retrage numai informațiile de proiect pe care le-ați specificat pentru o singură postare.

Referindu-se la preluarea datelor, să analizăm pașii necesari pentru a afișa metadatele postare în tabloul de bord al pluginului.

Preluarea datelor

Acum că toate informațiile au fost salvate în baza de date, putem introduce cod care îl va prelua și îl va afișa în fila corespunzătoare a fiecărui plugin. Lucru frumos despre asta este că va folosi funcții și constructori (cum ar fi get_post_meta și pentru) pe care le-am utilizat deja.

1. Proiect

Localiza admin / opinii / amprente parțiale / drafts.php. Presupunând că ați urmat cu totul până acum, codul ar trebui să arate astfel:

Pentru a popula acest lucru textarea, trebuie să sunăm get_post_meta utilizând ID-ul postului curent și cheia pe care am folosit-o pentru a salva informații mai devreme în acest articol. Uitați-vă la următorul cod:

Rețineți că trecem în trei parametri:

  1. Prima este ID-ul postului care este recuperat utilizând get_the_ID funcţie.
  2. Al doilea este cheia pe care am specificat-o atunci când salvăm datele pentru ao identifica în mod unic.
  3. A treia este o valoare booleană adevărată, care spune funcției să ne readucă valoarea ca șir, mai degrabă decât într-o matrice.

Dacă valoarea nu există, atunci pur și simplu returnează un șir gol, astfel încât textarea este gol.

2. Resurse

Pentru Resurse, facem un apel similar; totuși, de această dată, dorim să iteram prin rezultate, astfel încât să putem crea dinamic interfața cu utilizatorul.

Din cauza modului în care WordPress serializează matricea, dorim încă ca informația returnată într-un format de șir (deși va fi o matrice de serializată) care ne va permite să folosim pentru fiecare buclă pentru a itera prin ea.

Pe scurt, vom prelua informațiile din baza de date, printr-o buclă prin crearea acesteia intrare element pentru fiecare valoare și apoi redată la pagină. 

Acest lucru ne permite, de asemenea, să eliminăm elemente prin simpla ștergere a unei valori și apoi prin actualizarea postului. De acolo, afișajul se va redobândi astfel încât să nu existe elemente de intrare goale.

3. Publicat

Este, probabil, cea mai ușoară parte a pluginului. Deoarece deja avem codul atât de mare în șablon, singurul lucru pe care trebuie să-l facem este să determinați dacă valoarea casetei de validare este setată în matricea de date meta.

Deoarece folosim ID-ul de comentariu ca indice numeric al matricei, putem pur și simplu să verificăm dacă ID-ul de comentariu este conținut în matricea cheilor meta care este returnată din meta-date.

Iată cum:

load_post_comments (); ?>
  • COMMENT_AUTHOR; ?>: COMMENT_CONTENT; ?>


Observați că extragem valoarea din baza de date, trecând din nou Adevărat ca a treia valoare. 

Apoi, luăm ID-ul curent al comentariului și verificăm dacă această valoare este cuprinsă în cheile de matrice (utilizând array_key_exists) Din datele metadate postate care au fost returnate. Dacă da, bifăm căsuța de verificare; altfel, nu facem nimic.

Urmeaza

În acest moment, avem un plugin complet funcțional care îndeplinește toate cerințele pe care le-am propus să le construim începând cu primul articol din serie.

Dar plugin-ul este menținut? Adică, îndeplinește obiectivul principal al acestei serii?

În unele cazuri, da, dar există loc de îmbunătățire. Din moment ce o parte a dezvoltării trebuie să lucreze cu codul pe care îl moștenim, vom analiza modul în care vom refactoriza o parte din codul pe care l-am scris pentru a fi mai ușor de înțeles și mai ușor de întreținut.

În plus, vom analiza motivele pentru care realizăm unele dintre refacerile pe care le facem. La urma urmei, nu ar avea sens să simplificăm codul sau să îl mutăm fără nici un motiv.

Dar, înainte de a face acest lucru, mergeți mai departe și lucrați prin acest articol și aruncați o privire la codul din depozitul GitHub asociat și lăsați orice comentarii, întrebări sau reacții generale de mai jos.

Cod