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.
Pentru a începe, veți avea nevoie de următoarele instrumente:
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.
Î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.
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:
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.
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
înadmin
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 înadmin
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ămMeta_Box
și să treacă o instanță a acestuiaMeta_Box_Display
în constructorul său.În cele din urmă, numim
init
metoda care se află înMeta_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 înadmin
pe care o folosesc pentru a-mi adăposti casaquestions.txt
fişier.Apoi, vom avea nevoie pentru a crea o clasă care va:
- Deschideți fișierul.
- Citiți o linie aleatorie într-un șir.
- Închideți fișierul.
- 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 înadmin
. Apoi, să creăm un fișier numitclasa-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:
- Deschidem fișierul utilizând
fopen
, care ne va oferi o resursă pentru a citi fișierul.- 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.
- 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.
- 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
laMeta_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