Utilizarea spațiilor de nume și Autoloading în Pluginurile WordPress, Partea 1

Spațiile de nume și autoloading nu sunt subiecte discutate de obicei atunci când vine vorba de a lucra cu pluginurile WordPress.

Unele dintre acestea au de-a face cu comunitatea care se află în jurul acesteia, unele dintre acestea au de-a face cu versiunile de PHP pe care WordPress le susține și unele dintre ele pur și simplu au de-a face cu faptul că nu mulți vorbesc despre asta.

Și asta e bine, într-o oarecare măsură.

Nici spațiul de nume, nici autoloadingul nu sunt subiecte pe care trebuie să le folosiți în mod absolut pentru a crea pluginuri. Cu toate acestea, acestea pot oferi o modalitate mai bună de a vă organiza și structura codul, precum și de a reduce numărul de persoane necesita, require_once, include, sau include_once declarații pe care pluginurile dvs. le folosesc.

În această serie, vom examina exact ce spații de nume PHP sunt, de ce sunt benefice și cum să le folosiți. Apoi, vom analiza modul de utilizare a autoloader-urilor pentru a încărca automat fișierele de care avem nevoie fără a trebui să le încărcați manual în codul.

Înainte de a începe

Pentru a începe, veți avea nevoie de următoarele instrumente:

  • Un mediu de dezvoltare locală care include PHP 5.6.20, serverul web Apache și un server de bază de date MySQL.
  • Un director din care WordPress 4.6 este găzduit.
  • Un editor de text sau un IDE la alegerea dvs., pe care îl utilizați pentru scrierea unui plugin.
  • O cunoaștere activă a API-ului WordPress Plugin.

Odată ce ați reușit toate acestea, să începem să construim un plugin. Rețineți că, dacă vreuna dintre cele de mai sus este nouă, nu ezitați examinați oricare dintre tutorialele mele anterioare pe pagina mea de profil. 

În plus, puteți să mă urmați pe blogul meu și / sau pe Twitter la @tommcfarlin unde vorbesc despre dezvoltarea de software în contextul WordPress.

Cu asta a spus, să începem.

Ce vom construi

În această serie, vom construi un plugin simplu în primul rând pentru a demonstra modul în care spațiul de nume și autoloading funcționează în PHP. Dar pentru a face acest lucru, întotdeauna ajută la aplicarea conceptelor într-un mod practic.

În acest scop, vom construi un plugin care să faciliteze încărcarea stilurilor de stil și a stilurilor JavaScript în plugin-ul nostru și care afișează o casetă de meta care solicită utilizatorului o întrebare care să îi ajute să creadă ceva despre care să facă blog.

Nu, acesta nu este un lucru pe care probabil că îl veți supune WordPress Plugin Repository și nici nu este ceva pe care probabil îl veți folosi în afara acestui demo particular. Dar amintiți-vă că scopul acestei serii este de a demonstra cum funcționează spațiul de nume și autoloading.

Și prin acest exemplu vom face exact acest lucru.

Construirea pluginului

Dacă ați urmat oricare dintre tutorialele mele anterioare, atunci știți că unul dintre lucrurile pe care îmi place să le fac este să planific ce vom construi înainte de a începe să scriem orice cod. Prin urmare, pentru prima repetare a acestui plugin, este ceea ce știm că va trebui să facem:

  1. Definiți un fișier bootstrap pentru pornirea pluginului.
  2. Configurați un director pentru toate fișierele care vor afișa caseta meta.
  3. Creați un director pentru a găzdui clasa care va încărca dependențele noastre.
  4. Pregătiți foile de stil și JavaScript pentru pluginul nostru.

Se pare simplu, nu? Dacă nu, nu vă faceți griji. O să vă conduc întregul proces complet cu cod, comentarii, capturi de ecran și explicații. 

Să începem.

Crearea directorului de pluginuri

De la început, știm că vom avea nevoie de un fișier care servește ca bootstrap pentru plugin. Știm, de asemenea, că vom avea nevoie de un director pentru funcționalitatea administrativă.

Să mergem mai departe și să creăm asta acum:

Evident, avem un singur fișier gol și un director de administrare. Să mergem mai departe și să instalăm acest plugin astfel încât acesta să apară în contextul ecranului de activare Pluginul WordPress.

Pentru a face acest lucru, trebuie să adăugăm următorul bloc de cod în partea de sus a fișierului plugin:

Apoi, când navigați la pagina Plugin WordPress din zona de administrare, ar trebui să vedeți că aceasta apare în lista dvs. de pluginuri. Dacă optați să o activați, nu se va întâmpla nimic din moment ce nu am scris niciun cod.

În acest moment, putem merge mai departe și începem să definim clasa care va face meta caseta noastră pe Adăugați postare nouă pagină.

Adăugarea unui Meta Box

Această parte a tutorialului va presupune că sunteți oarecum versat în crearea de casete meta. Dacă nu, nu ezitați să revizuiți conceptele din această serie și apoi să vă întoarceți la această parte când ați terminat. 

Mai întâi, să creăm un fișier numit clasa-meta-box-display.php în admin directorul pluginului nostru. Codul trebuie să includă următoarele. Asigurați-vă că revizuiți comentariile pentru a vă asigura că înțelegeți tot ce este responsabil pentru această clasă.

Din codul de mai sus, ar trebui să puteți constata că această clasă va fi responsabilă pentru afișarea conținutului din interiorul căsuței meta. Pentru moment, totuși, noi pur și simplu l-am reluat o declarație de vedere. 

Vom schimba acest lucru mai târziu în tutorial.

Apoi, trebuie să introducem o clasă care să reprezinte meta-box-ul însuși. Deci, creați un clasa-meta-box.php fișier în admin directorul pluginului nostru. Iată codul pentru a face exact asta. Din nou, revizuiți codul și apoi vă voi explica ce se întâmplă sub clasă:

display = $ display;  / ** * Înregistrează această casetă meta cu WordPress. * * Definește o casetă de metadate care va face întrebări de inspirație în partea de sus * a barei laterale a paginii "Adăugați o nouă postare" pentru a ajuta pe bloggeri * să scrie ceva despre scrierea postului. * / funcția publică init () add_meta_box ('tutsplus-post-questions', 'Inspiration Questions', array ($ this-> display, 'render'), 'post', 'side', 'high');  

Această clasă menține un singur atribut care este o referință la afișarea sa. Aceasta înseamnă că această clasă este responsabilă pentru definirea căsuței meta (care, la rândul ei, solicită obiectului de afișare să redea mesajul).

Afișajul este menținut ca set de proprietate privată în constructor. Cutia meta nu este definită de fapt până la init se numește metoda (pe care o vom vedea în bootstrap-ul plugin-ului mai târziu în tutorial).

În acest moment, avem tot ce avem nevoie pentru a afișa o rubrică meta cutie Adăugați o pagină nouă pentru postare. Dar, mai întâi, trebuie să stabilim bootstrap-ul plugin-ului nostru.

În tutorialele anterioare, am făcut acest lucru foarte mult, așa că voi include doar codul necesar (de când am definit antetul de mai sus). Am adăugat comentarii, dar, de asemenea, vă asigur că explicați ce se întâmplă după cod. 

Acest lucru este în mod special relevant deoarece autoloaderul nostru va nega în cele din urmă necesitatea pentru unele dintre ceea ce veți vedea.

init ();  

În primul rând, ne asigurăm că acest fișier nu poate fi accesat în mod direct și poate fi executat numai de WordPress în sine.

Apoi, noi include_once clasele pe care le-am creat până acum. Apoi, instanțiăm Meta_Box și să treacă o instanță a acestuia Meta_Box_Display în constructorul său.

În cele din urmă, numim init metoda care se află în Meta_Box clasă.

Presupunând că totul merge bine, ar trebui să putem activa pluginul și să vedem caseta de meta pe un Adăugați postare nouă pagina (sau, într-adevăr, un Actualizați postarea pagina, de asemenea).

În acest moment, avem un plugin funcțional, dar nu face altceva decât să creeze o casetă meta și să afișeze un șir de text.

hai macar pentru a afișa câteva citate inspirate și pentru a afișa o listă aleatorie de fiecare dată când pagina este încărcată.

Afișarea citatelor de inspirație

În primul rând, trebuie să găsim un fișier text de citate de inspirație. Din fericire, Internetul oferă o multitudine din acestea pe care le putem folosi în proiectul nostru (și sunt disponibile în mod liber). În acest scop, am creat o date subdirector în admin pe care o folosesc pentru a-mi adăposti casa questions.txt fişier.

Apoi, vom avea nevoie pentru a crea o clasă care va:

  1. Deschideți fișierul.
  2. Citiți o linie aleatorie într-un șir.
  3. Închideți fișierul.
  4. Returnați șirul la apelant.

Să mergem mai departe și să creăm acea clasă acum. Deoarece acesta este un utilitar și va fi folosit în partea administrativă a plugin-ului, să creăm un UTIL subdirector în admin. Apoi, să creăm un fișier numit clasa-intrebare-reader.php.

Vom specifica codul pentru această clasă într-un moment, dar vom reveni la fișierul de bootstrap al pluginului și nu uitați să includeți fișierul. Codul rezultat ar trebui să arate astfel:

După cum puteți vedea, numărul de fișiere pe care trebuie să le includeți manual este mai lung. Imaginați-vă dacă lucrăm la un plugin mare! Cu toate acestea, vom reveni la aceasta mai târziu în serie.

Pentru moment, să ne îndreptăm atenția spre cititorul de întrebări. Codul clasei ar trebui să arate astfel:

deschide (nume fișier $); $ question = $ this-> get_random_question (fișier $ file_handle, nume fișier $); $ this-> close ($ file_handle); returnați $ question;  / ** * Deschide fișierul pentru citirea și returnează resursa în fișier. * * @access private * @param string $ filename Calea către fișierul care conține întrebarea. * @ resource resume O resursă la fișier. * / funcția privată deschisă (nume fișier $) return fopen (nume fișier $, 'r');  / ** * Închide fișierul care a fost citit. * * @acces privat * @param string $ file_handle Resursa la fișierul care a fost citit. * / închide funcția privată ($ file_handle) fclose ($ file_handle);  / ** * Deschide fișierul pentru citirea și returnează resursa în fișier. * * @acces privat * @param string $ file_handle Resursa la fișierul care a fost citit. * @param string $ filename Calea către fișierul care conține întrebarea. * @ string retur $ question Întrebarea care trebuie afișată în caseta meta. * / funcția privată get_random_question ($ file_handle, $ nume fișier) $ questions = fread ($ file_handle, file size (nume fișier $)); $ questions = explode ("\ n", $ întrebări); // Căutați o întrebare până când un șir gol nu mai este returnat. $ question = $ întrebări [rand (0, 75)]; în timp ce (gol ($ question)) $ question = $ questions [rand (0, 75)];  returnați $ question;  

Observați că acest cod este relativ simplu, dar dacă nu sunteți familiarizat cu unele dintre operațiile de bază ale fișierelor din PHP, iată ce facem:

  1. Deschidem fișierul utilizând fopen, care ne va oferi o resursă pentru a citi fișierul.
  2. Apoi, citim conținutul fișierului și apoi luăm fiecare rând al fișierului și îl scriem într-un index al unui matrice.
  3. După aceea, alegem un număr aleatoriu dintr-o serie de întrebări și îl returnează metodei care îl numește. Dacă returnează un șir gol, aruncăm o privire din nou până când se află o întrebare.
  4. Apoi, închidem resursa la fișier.

În cele din urmă, pentru a utiliza această clasă, trebuie pur și simplu să o instanțiați, să știți calea către un dosar plin de întrebări și apoi să apelați get_question_from_file metodă.

Notă: Această clasă are nu face orice manipulare de erori. Aceasta este o practică standard atunci când lucrați cu fișiere. De exemplu, ce ar trebui să facem dacă fișierul nu există? Ce trebuie să facem dacă nu este formatat corect sau dacă nu reușim să închidem resursa?

Toate acestea sunt întrebări bune, dar acestea sunt în afara scopului acestui tutorial. Toate aceste informații pot fi găsite în manualul PHP (și poate și în alte tutoriale din rețeaua Envato Tuts +),.

Pentru moment, totuși, suntem preocupați de citirea unui fișier despre care știm că există și suntem preocupați de afișarea rezultatelor într-o casetă meta.

Ce avem atât de departe

În acest moment, putem începe să punem totul împreună. Presupunând că am făcut totul în mod corect, ar trebui să putem trece o instanță a Question_Reader la Meta_Box_Display, cereți o întrebare și apoi afișați-o în caseta meta.

Mai întâi, să actualizăm fișierul bootstrap:

init (); 

În codul de mai sus, observați că Meta_Box_Display acceptă acum o instanță a cititorului de întrebări în constructorul său. Aceasta presupune că va trebui să introducem o proprietate nouă, pe care o vom face acum:

question_reader = $ question_reader;  / ** * Redă un singur șir în contextul casetei meta căreia îi aparține * Afișajul. * / render function public () $ file = dirname (__FILE__). '/Data/questions.txt'; $ question = $ this-> question_reader-> get_question_from_file (fișier $); echo wp_kses ($ question);  

Observați că acest fișier utilizează calea către întrebările pe care fișierul le-a adăugat la subdirectorul de date. În afară de calea care este codificată greu, această clasă depinde, de asemenea, de o instanță a Question_Reader.

În scopul demo-ului la care lucrăm (și anume, spații de nume și autoloading), este în regulă. Într-un proiect viitor, dorim ca proiectele să aibă o legătură mai mică între ele. Poate că acesta va fi un subiect pentru un tutorial viitor.

Totuși, primarul de la codul de mai sus este că Meta_Box_Display clasa poate afișa acum o întrebare utilizatorului.

În plus, observați utilizarea wp_kses pentru a dezinstala datele înainte de ao prezenta utilizatorului.

Reîmprospătarea Adăugați postare nouă pagina trebuie să vă prezinte o imagine asemănătoare:

Și dacă actualizați pagina, puteți vedea noi întrebări încărcate.

Unde mergem de aici?

Evident, încă nu trebuie să abordăm subiecte legate de spații de nume și de autoloading, dar asta e bine! Este important să punem fundația pentru un plugin care nu le folosește. În felul acesta, când noi do punerea în aplicare a acestora, putem vedea beneficiile pe care le efectuează.

În plus, încă mai avem de făcut unele eforturi suplimentare: trebuie să introducem JavaScript și CSS și un încărcător de active. Acest lucru ne va permite să obținem o imagine și mai largă a modului în care ambalarea fișierelor noastre în spații de nume este benefică.

Rețineți că puteți găsi toate tutorialele mele anterioare pe pagina mea de profil și puteți să mă urmați pe blogul meu sau pe Twitter.

Ca întotdeauna, dacă sunteți în căutarea altor utilități pentru a vă ajuta să vă construiți un set tot mai mare de instrumente pentru WordPress sau, de exemplu, pentru a studia și a deveni mai bine versat în WordPress, nu uitați să vedeți ce avem la dispoziție în Envato Piaţă.

Cu aceasta a spus, vom avea o versiune de lucru a plugin-ului gata pentru a descărca începând din următoarea tutorial din această serie. Dacă doriți să utilizați codul din tutorialul de mai sus, nu ezitați să încercați să faceți acest lucru. În plus, nu ezitați să puneți întrebări în comentarii. 

Resurse

  • add_meta_box
  • ADD_ACTION
  • plugins_loaded
  • fopen
  • fread
  • fclose
  • wp_kses
Cod