În cadrul acestei serii, am creat un plugin care are ca scop să ofere autorilor o modalitate de a colecta, gestiona și salva idei și referințe la conținutul pe care îl creează în WordPress.
În același timp, căutăm și modalități prin care putem organiza plugin-ul nostru, astfel încât codul și organizația de fișiere să fie clare și întreținute, astfel încât, pe măsură ce plugin-ul continuă să fie dezvoltat, putem adăuga, elimina și menține cu ușurință caracteristici.
Până în acest moment, am pus împreună organizarea de fișiere de bază a pluginului, precum și a front-end-ului, dar de fapt nu am implementat funcționalitatea pentru salvarea informațiilor în baza de date. Și dacă nu puteți salva informații, atunci plugin-ul are un beneficiu mic pentru oricine.
În acest post, vom reveni în codul de pe server și vom începe să implementăm funcționalitatea care va:
Ne-am desființat munca pentru noi. În acest articol, vom examina primii doi pași și apoi în postul următor, vom analiza ultimele două pași.
Pentru a verifica dacă utilizatorul are capacitatea de a publica pentru a salva meta date postale, trebuie să implementăm un control de securitate în timpul procesului de serializare. Pentru a face acest lucru, trebuie să profităm de o valoare nonce.
Un nonce este un "număr folosit o singură dată" pentru a proteja URL-urile și formele de utilizare.
Pentru a introduce una în meta-caseta noastră, putem implementa funcționalitatea în markupul care este responsabil pentru redarea șablonului de postare. Pentru a face acest lucru, încărcați admin / opinii / autori-comentarii-navigation.php
și actualizați șablonul astfel încât acesta să includă un apel către wp_nonce_field
:
Proiecte publicate
În codul de mai sus, am introdus un nonce care corespunde acțiunii de salvare a comentariului autorului (pe care l-am denumit authors_commentary_nonce
) și a asociat-o cu o valoare care este identificată de authors_commentary
.
Vom vedea unde se va juca momentan. Deocamdată, dacă încărcați browserul, nu veți vedea nimic nou. Aceasta deoarece valorile nonce sunt afișate într-un câmp ascuns.
Pentru cei care sunt curioși, puteți lansa instrumentele de dezvoltare ale browserului dvs. preferat, puteți examina caseta de meta și, în marcaj, ar trebui să găsiți ceva asemănător cu următorul:
Desigur, valoare
din nonce va fi diferit.
Pentru a vă asigura că utilizatorul are permisiunea de a salva postarea, vrem să verificăm trei lucruri:
Vom scrie două funcții de ajutor pentru a obține primul și al treilea și vom folosi câteva funcții încorporate pentru a verifica numărul doi (care va fi efectiv utilizat în a doua funcție de ajutor).
Mai întâi, hai să mergem mai departe și să setăm cârligul și funcția care va fi folosită pentru a mobiliza funcțiile de ajutor și pentru a salva datele meta. În constructor pentru Authors_Commentary_Meta_Box
, adăugați următoarea linie de cod:
Apoi, să definim funcția. Rețineți că fac apeluri la două funcții în următorul bloc de cod. O să le definim momentan:
is_valid_post_type () || ! $ this-> user_can_save ($ post_id, 'authors_commentary_nonce', 'authors_commentary_save')) retur;
Având în vedere codul de mai sus, îi spunem lui WordPress să ne tragă save_post
funcție ori de câte ori este save_post
se numește acțiune. În interiorul funcției, spunem "Dacă postarea care este salvată nu este un tip de post" post "sau dacă utilizatorul nu are permisiunea de a salva, atunci ieșiți din funcție."
Desigur, trebuie să definim funcțiile astfel încât să funcționeze logica. În primul rând, vom scrie is_valid_post_type
funcția ca a privat
funcție de clasa curentă. Va verifica $ _POST
pentru a vă asigura că tipul de post care este salvat este, de fapt, un post.
Apoi, vom adăuga
user_can_save
funcţie. Aceasta este funcția care va asigura că postarea nu este salvată de WordPress și că dacă un utilizator salvează funcția, atunci valoarea nonce asociată cu acțiunea post este setată corect.Observați aici că trecem prin
nonce_action
sinonce_id
pe care am definit-o în șablon în primul pas. De asemenea, folosimwp_verify_nonce
în legătură cu informațiile menționate.Acesta este modul în care putem verifica dacă postarea care este salvată este făcută de un utilizator care are accesul corect și permisiunile.
Sanitizează datele
Presupunând că utilizatorul lucrează cu un tip de post standard și că are permisiunea de a salva informații, trebuie să dezinfectăm datele.
Pentru a face acest lucru, trebuie să facem acest lucru după cum urmează:
- Verificați pentru a vă asigura că nicio informație din datele post-metadate nu este disponibilă
- Stripați tot ce ar putea fi periculos pentru a scrie în baza de date
După ce procedăm astfel, vom examina salvarea informațiilor pentru fiecare dintre căsuțele meta. Dar mai întâi, să lucrăm la dezintoxicare. Există câteva modalități prin care putem implementa acest lucru. În scopul acestui post, vom face acest lucru în modul cel mai simplu posibil: vom verifica existența informațiilor pe baza cheii sale, atunci, dacă există, o vom dezinfecta.
Pentru programatorii cu experiență, probabil că veți observa câteva mirosuri de cod cu codul pe care urmează să-l scriem. Mai târziu, în această serie, vom face niște refactorizări pentru a vedea cum putem face pluginul mai ușor de întreținut, astfel încât toate acestea fac parte din intenția acestui post special.
Cu asta a spus, hop înapoi în
save_post
funcţie.1. Schițe
Deoarece prima filă care există în caseta meta este Schițe fila, vom începe cu asta. Observați că este a
textarea
, astfel încât logica care există pentru dezinfecția acestor informații ar trebui să fie după cum urmează:
Rețineți că textarea
se numeste autori-Comentariu-proiecte
astfel încât să putem accesa în cadrul $ _POST
matrice. Pentru a realiza acest lucru, vom folosi următorul cod:
Pur și simplu, verificăm dacă informațiile din
$ _POST
matricea este goală. Dacă nu, atunci vom dezinfecta datele.2. Resurse
Acest câmp este mai puțin o formă, deoarece este dinamic. Adică, utilizatorul poate avea ceva de la câmpuri de intrare zero la multe, toate de care va trebui să gestionăm. Rețineți că această filă specială este concepută în primul rând pentru URL-uri, așa că trebuie să ne asigurăm că dezinfectăm în siguranță informațiile în acest mod.
În primul rând, trebuie să facem o mică schimbare la
createInputElement
funcția care există în cadruladmin / active / js / resources.js
fişier. În mod specific, trebuie să ne asigurăm că atributul name utilizează un matrice, astfel încât să putem accesa în mod corespunzător și să îl iteram prin el când privim$ _POST
date.Asigurați-vă că liniile de cod responsabile pentru crearea elementului real arată astfel:
// Apoi, creați elementul de intrare real și apoi îl returnați apelantului $ inputElement = $ ('') .attr (' type ',' text ') .attr (' name ',' authors-commentary-resources ' + iInputCount) .attr ("valoare", ");Observați că cheia pentru ceea ce am făcut se află în linia care actualizează
Nume
. Mai exact, vom plasa numărul de intrări pe un index al matricei.Apoi, hop înapoi în
save_post
și adăugați următorul cod (pe care îl vom discuta după bloc):Deoarece lucrăm cu o serie de intrări, trebuie să verificăm mai întâi dacă matricea nu este goală. Dacă nu este, atunci trebuie să o repetăm pentru că nu suntem siguri câte inputuri trebuie să gestionăm.
Similar cu blocul anterior, facem un nivel de bază de dezintoxicare și scăpare. Acesta este un lucru pe care îl puteți face atât de agresiv sau de relaxat pe cât doriți. Vom reveni la această condiție în următoarea postare când este momentul să salvați datele.
3. Publicat
Această filă este similară cu filele anterioare în care ne confruntăm cu un număr nedeterminat de elemente pe care trebuie să le dezinfectăm. Aceasta înseamnă că vom avea nevoie să facem o mică actualizare a responsabilului parțial pentru a face această intrare.
În partea superioară, avem de-a face cu o casetă de selectare care are o valoare booleană de a fi verificată sau nu (sau, mai precis, "on" sau goală), astfel încât dezinfectarea informațiilor să fie foarte ușoară.
Mai întâi, să actualizăm parțial. Localiza
admin / opinii / amprente parțiale / published.php
. Apoi, găsiți linia care defineșteintrare
bifați caseta de selectare și modificați-o astfel încât să pară următoarele:Observați că l-am schimbat
Nume
atribut astfel încât să utilizeze un matrice cu un index ca valoare. În continuare, vom reveni însave_post
funcționează încă o dată pentru a introduce validarea acestui element particular:Așa cum am făcut și cu datele anterioare, mai întâi verificăm dacă conținutul există. Dacă este așa, atunci îl dezinfectăm pentru ao pregăti pentru salvare. Dacă nu, atunci nu facem nimic.
Pe Salvare
În acest moment, suntem poziționați pentru a lua ultimele două puncte ale seriei:
- Salvarea și preluarea
- refactorizare
Începând cu următoarea postare, vom revizui codul pe care l-am scris în această postare pentru a vedea cum îl putem salva în baza de date și îl putem extrage din baza de date pentru ao afișa pe front-end.
Apoi vom trece la refactorizare. La urma urmei, o parte din codul de întreținere scris se asigură că este bine organizat și ușor de schimbat. Deoarece codul cu care lucrăm zilnic a fost deja scris și ar putea să fie refactat, vom vedea cum să facem acest lucru până la sfârșitul seriei.
Între timp, examinați codul de mai sus, verificați sursa de la GitHub și lăsați orice întrebări și comentarii în câmpul de mai jos.