Crearea paginilor personalizate de administrare WordPress, Partea 4

Când începem articolul final din seria despre crearea paginilor personalizate de administrare WordPress în WordPress, cred că este important să reamintim că acest lucru nu înseamnă că ar trebui să evităm setările API (sau oricare dintre API-urile native). 

De fapt, fiecare API are locul ei și, evident, folosim multe dintre ele prin acest cod. Dar este posibil să fie momente în care lucrați la un plugin personalizat sau la o aplicație personalizată și trebuie să puteți implementa un pic de validare personalizată, serializare, rutare și așa mai departe.

Și asta am făcut în această serie. Deci, pe măsură ce avansăm în completarea pluginului nostru, vreau să fiți sigur că înțelegeți că nu pledez pentru eludarea niciunui API nativ. Îmi propun să folosesc ce API-uri sunt disponibile pentru cerințele proiectului tău.

Pentru revizuirea dvs.

În acest moment, presupun că ați fost prins cu articolele anterioare. Dacă nu, probabil că veți avea dificultăți în a înțelege de unde am venit și de ce facem unele dintre deciziile pe care le luăm în legătură cu codul.

În plus, veți pierde câteva dintre principiile pe care le-am discutat anterior. Pe scurt, recomand să mă prind și apoi să mă întorc la acest articol.

Înainte de a începe

Cu ceea ce a spus (și vorbind de cerințe), există doar câteva lucruri pe care trebuie să le încheiem, deoarece se referă la acest plugin.

Mai exact, trebuie:

  • prelua informațiile din baza de date
  • validați informațiile
  • afișați-o pe tabloul de bord
  • afișați informațiile de pe front

Din fericire, majoritatea lucrărilor au fost făcute pentru noi. Avem toate informațiile de care avem nevoie în baza de date. În acest moment, este vorba de introducerea funcționalității care va fi do ceva cu aceste date.

Ca de obicei, presupun că aveți cea mai recentă versiune a codului sursă și sunteți gata să continuați cu această serie adăugând la ea restul de cod. 

Cu asta a spus, să începem.

Finalizarea pluginului

Înainte de a începe să scriem cod, vreau să clarific faptul că codul pe care îl vom scrie este simplu, dar există un nivel de refactorizare pe care ar trebui să-l introducem odată ce ajungem la punctul de a face informațiile disponibile atât pentru back-end și front-end.

E un lucru bun, totuși.

Nu numai că ne va da șansa să ne gândim critic la organizarea codului nostru, dar ne va expune, de asemenea, la unele tehnici adiționale orientate spre obiecte pe care nu le-am văzut de-a lungul seriei tutorialului până acum.

În acest sens, să lucrăm pentru a prelua informațiile din baza de date.

Recuperarea informațiilor din baza de date

Prinderea informațiilor din baza de date este un proces simplu. Deoarece am lucrat anterior cu funcții asemănătoare update_option, acest lucru ar trebui să fie foarte ușor. 

Vom lucra cu noi get_option. Este nevoie doar de un singur argument, și anume ID-ul sau cheia pe care am folosit-o pentru a stoca informațiile. În cazul nostru, asta e tutsplus-custom-date. Dacă doriți să deveniți creativi, puteți trece un al doilea argument opțional care va fi returnat dacă informațiile nu sunt găsite.

Pentru a arăta cum se poate folosi acest lucru, voi avea funcția returnează un șir gol, astfel încât să avem ceva valabil pentru a fi afișat utilizatorului (chiar dacă nu este nimic). Fragmentul de cod pentru a face acest lucru arata astfel:

Dar aceasta ridică două întrebări:

  1. În cazul în care acest lucru merge (mai ales dacă vom face acest lucru în două locuri în plugin)?
  2. Nu trebuie să validăm aceste informații?

Vom analiza prima întrebare mai târziu în tutorial. În primul rând, să vorbim despre validare.

Validați informațiile

Există multe lucruri despre validare în WordPress. Dar pentru a păstra acest tutorial cât mai direct posibil, vom vorbi despre validarea intrărilor. La urma urmei, avem de a face cu intrarea utilizatorului prin intermediul unui intrare element, deci are sens.

Puteți citi totul în Codul, dar validarea intrărilor este adesea definită ca fiind următoarea:

Validarea datelor este procesul de asigurare a funcționării unui program pe date curate, corecte și utile.

În ultimul articol, am abordat tema de dezintoxicare, care asigură în principiu că datele sunt curate înainte de a fi introduse în baza de date. În mod similar, validarea se asigură că este curată, sigură și ușor de citit pentru utilizatorii noștri.

În acest scop, nu este suficient doar pentru a apuca informațiile din baza de date. Trebuie să o validăm și ea. În cazul pluginului nostru, datele sunt destul de simple, încât ar putea părea ca o suprasolicitare pentru ao valida; cu toate acestea, scopul acestui exercițiu este de a contribui la dezvoltarea spiritului de gândire pentru modul în care trebuie să mergem în ceea ce privește dezinfectarea, salvarea, recuperarea, validarea și afișarea datelor.

Tehnici de validare

Și, la fel ca în cazul dezintoxicării, WordPress oferă câteva funcții care ușurează validarea, mai ales în ceea ce privește validarea intrărilor. În această situație, putem fi la fel de agresivi cum ne place. 

În cazul nostru, ar fi suficient să folosim doar esc_attr la redarea opțiunilor. Dacă am permis utilizatorilor să introducă orice tip de HTML, atunci am putea folosi wp_kses.

Aceasta din urmă funcție poate necesita un tutorial pe cont propriu, mai ales dacă sunteți nou în WordPress, așa că vom rămâne cu cei dintâi pentru scopurile noastre.

deserializarea

Mai devreme în proiect, am creat o clasă specială pentru salvarea informațiilor în baza de date. Am chemat această clasă serializer. Pentru cei care nu își amintesc exact ce face:

  • Clasa definește o funcție care se declanșează pe admin_post cârlig și salvează informațiile trimise serverului.
  • Funcția verifică faptul că informațiile sunt în siguranță pentru salvare și că utilizatorul are permisiunea de a salva în baza de date.
  • Funcția dezinstalează datele și le scrie în baza de date.

Dar nu vrem să supraîncărcăm acea clasă cu o responsabilitate care nu are sens. Și din moment ce vom afișa aceste informații atât pe pagina de opțiuni, cât și pe partea front-end a site-ului, s-ar justifica faptul că avem o clasă pentru deserializarea valorii și pentru a fi accesibilă pentru întreaga aplicație WordPress.

Deci, în rădăcina directorului dvs. plugin, creați un impartit și adăugați un fișier numit clasa-deserializer.php.

Apoi, dorim ca codul nostru să fie configurat astfel încât să:

  • se bazează pe principii orientate pe obiecte
  • preia informațiile pentru care a fost solicitat
  • validează informațiile
  • îl returnează apelantului

În acest scop, scheletul inițial al clasei poate arăta astfel:

E simplu, sigur. Vom adăuga mai multe coduri în acest tutorial, dar rețineți principiul responsabilității unice și aceasta este o clasă care trebuie utilizată între două părți ale aplicației WordPress.

Observați că în codul de mai sus am definit trei funcții. Să discutăm ce va face fiecare:

  • get_value va folosi cheia de opțiune de intrare care, în cazul nostru tutsplus-custom-date, și va returna valoarea apelantului. În conformitate cu standardele de codificare WordPress, trebuie să folosim "escaparea târzie" pentru a ne asigura că validăm corect informațiile. Vom vedea acest joc pentru moment.

Cu asta a spus, să mergem mai departe și să stingem funcțiile. Voi oferi, de asemenea, PHP DocBlocks pentru a explica ceea ce face fiecare funcție.

În acest moment, codul de mai sus ar trebui să fie ușor de urmărit, având în vedere punctele marcate mai sus și comentariile din cadrul codului.

Afișați-l pe pagina cu opțiuni

Pentru a afișa acest lucru pe pagina cu opțiuni, trebuie să revedem modul în care instanțiăm Submenu_Page în personalizate-admin-settings.php fişier. Mai exact, trebuie să instanțializăm deserializatorul și să îl transmitem în constructorul Submenu_Page.

În primul rând, trebuie să includem fișierul. Acest lucru se poate întâmpla imediat după ce verificăm dacă fișierul principal de plugin este accesat direct:

Codul din funcția principală a rădăcină a pluginului ar trebui să pară acum:

init (); $ deserializer = nou Deserializator (); $ plugin = nou Submeniu (nou Submeniu_Page ($ deserializer)); $ Plugin-> init (); 

Și apoi constructorul pentru Submenu_Page ar trebui să arate astfel:

deserializer = $ deserializer;  

De aici, putem aborda pagina opțiunilor. Pur și simplu actualizăm valoare atribut prin apelarea funcției din deserializator. Amintiți-vă, deoarece vom recupera necondiționat valoarea și în cele din urmă vom întoarce un șir gol dacă nu există nimic, ar trebui să funcționeze bine.


"/>

Și cu asta, ar trebui să puteți să salvați și să preluați valoarea dvs. pe pagina opțiunilor.

Arătați-le pe Front-End

Aproape că am terminat. Ultimul lucru pe care trebuie să-l facem este să configurați plugin-ul pentru a afișa mesajul personalizat pe front-end. În mod specific, dorim să afișăm tot ce a introdus utilizatorul pe o pagină de post unică (versus o pagină de arhivă sau orice alt tip de pagină) și să o facă peste fiecare post.

Aceasta înseamnă că vom avea nevoie să facem următoarele:

  • Configurați o funcție care va utiliza cârligul the_content.
  • Citiți valoarea utilizând deserializatorul nostru.
  • Prefixați valoarea înainte de conținut (poate în elementul său propriu).

Din fericire, nu este acea multă muncă, mai ales pentru că avem cea mai mare parte a muncii de care vom avea nevoie pentru a începe. Cu toate acestea, trebuie să creați o zonă a plugin-ului responsabil cu manipularea front-end-ului site-ului.

În acest scop, creați un public directorul din directorul pluginului dvs. și adăugați-l clasa de conținut-messenger.php.

În cadrul clasei, trebuie să definim un constructor care va accepta deserializatorul ca o dependență. Constructorul (și proprietatea necesară) ar trebui să arate astfel:

deserializer = $ deserializer; 

Apoi trebuie să creăm un init care va înregistra o funcție internă (pe care o vom apela afişa) pentru a face conținutul împreună cu noul mesaj.

După aceea, va trebui să actualizăm fișierul plugin principal, astfel încât acesta să instanțize noua noastră clasă și să treacă deserializatorul la constructor. Apoi va initializa clasa.

În primul rând, îl vom include:

Apoi o vom instantiza:

init (); 

De aici, ar trebui să fim gata să plecăm. Asigurați-vă că ați introdus o valoare pe pagina de opțiuni. Salvați-vă munca și consultați o singură pagină de postare pe site-ul dvs. Ar trebui să arate ceva de genul:

Dacă nu, comparați codul cu cele de mai sus (sau ce se atașează) și asigurați-vă că ați configurat toate clasele, funcțiile și cârligele dvs..

Un cuvânt despre viziuni și dependențe

Deși am discutat despre principiul responsabilității unice în cadrul acestei serii, nu am vorbit de multe despre subiecte mai avansate pe care le-am putea folosi pentru a face codul chiar mai curat și pentru a urma practici mai bune.

Unele dintre aceste subiecte includ lucruri cum ar fi autoloading PHP și lucruri cum ar fi Dependency Injection. Nu am vorbit despre aceste lucruri, deoarece acestea se află în afara focarului principal și punctul principal în care seria specială urmărește să învețe.

În funcție de modul în care se recepționează această serie specială, voi lua în considerare crearea unor tutoriale specifice acestor subiecte.

Concluzie

Și cu asta, încheiem seria despre crearea paginilor de administrare personalizate. Sper că în această serie ați învățat câteva lucruri dincolo de modul standard de a crea pagini de administrare.

În plus, sper că ați văzut cum puteți aplica câteva tehnici de dezvoltare software în lucrul dvs. zilnic cu WordPress. În plus, sper că discuția privind viziunile și dependențele a dat naștere unui interes și pentru teme mai avansate. Acestea sunt lucruri pe care sper să le acoperim și în tutorialele viitoare.

Ca de obicei, puteți vedea 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 uitați să descărcați codul pe bara laterală a acestui post, să îl revedeți, să jucați cu el și să vedeți ce puteți face pentru ao extinde și pentru a vă adăuga funcționalitatea. Ca de obicei, nu ezitați să mă contactați prin comentariile privind tutorialul.

Resurse

  • API-ul Setări
  • Ghidul complet al API-ului pentru setări
  • update_option
  • get_option
  • Validarea intrărilor
  • Data validarii
  • esc_attr
  • wp_kses
  • admin_post
  • Principiul unic de responsabilitate
  • Evadare târzie
Cod