Object-Oriented Programming în WordPress Construirea plugin-ului I

În acest moment al seriei, suntem in cele din urma capabil să înceapă construirea plugin-ului nostru folosind tehnicile orientate pe obiect pe care le-am învățat până acum în serie.

Dacă vă alăturați acum, recomandăm să vă apropiați de serii până acum; în caz contrar, riscați să pierdeți pe unele dintre punctele cheie pe care le vom demonstra, pe măsură ce construim pluginul în următoarele câteva articole.

  1. O introducere
  2. Clase
  3. Tipuri
  4. Structuri de control: declarații condiționate
  5. Structuri de control: buclă
  6. Funcții și atribute
  7. domeniu

În regulă, deci cu asta ați spus că este timpul să începeți să scrieți codul. Înainte de a începe, este important să înțelegeți că construirea unui plugin - sau a oricărui tip de software pentru acest lucru - necesită un număr de pași și, deși vom scrie un pic de cod în acest articol special, nu vom fi adăugând o mulțime de funcționalități până când avem schela sau fundația pluginului.

Pentru a face acest lucru, trebuie să revizuim mai multe lucruri:

  1. Definirea funcțiilor pluginului pe care o vom scrie,
  2. Distribuiți ceva care ar putea să nu construim în această primă versiune,
  3. Discutați despre arhitectura și organizarea fișierelor pluginului.

Deci, hai să acoperi aceste puncte foarte repede, și apoi vom intra în detaliile plugin-ului.

Postați Meta Viewer

Pe parcursul următoarelor articole, vom construi un plugin care introduce o postare meta-box într-un singur editor de postare care afișează toate datele meta asociate postului curent.

1. Caracteristicile

Plugin-ul va fi read-only numai pentru că puteți vedere datele meta asociate pluginului. Nu vom putea introduce meta date noi - cel puțin nu pentru prima versiune.

Celelalte caracteristici sunt că o va afișa într-un format curat și organizat, astfel încât să putem identifica cu ușurință cheia și valorile pentru ID post. Vom introduce, de asemenea, o ancoră care ne va permite să copiem o linie de cod care ne va permite să sunăm la informația sub forma get_post_meta ($ post_id, $ meta_key, $ meta_value);.

2. Un Strong 1.0

Înainte de a merge mai departe, există o mulțime de caracteristici îngrijite pe care le putem implementa în acest plugin. 

Am putea introduce abilitatea de a:

  • adăugați meta date postare personalizate noi
  • actualizați metadatele postale existente
  • să ștergeți metadatele postate existente
  • sortați coloanele cu tastele meta
  • sortați coloanele cu valorile meta
  • … si asa mai departe

Dar în conformitate cu filozofia de a crea un "puternic 1.0", vom construi o fundație subțire și concentrată pe care să putem continua să construim plugin-ul așa cum am considerat potrivit după această serie.

Poate că vom acoperi unele dintre caracteristicile de mai sus înainte de sfârșitul seriei, poate că veți dori să introduceți propriul set de caracteristici. Ambele sunt ok. Linia de fund este că vom construi un nucleu puternic, din care putem continua să repetăm ​​pentru a extinde funcționalitatea.

3. Arhitectura și organizarea fișierelor

Prin urmare, cu toate acestea, să vorbim mai întâi prin punctele superioare ale pluginului, atunci vom analiza modul în care vom organiza fișierele și componentele pluginului.

  • Plugin-ul necesită un fișier de bază de plugin care va servi ca un fel de încărcător de boot (sau fișier bootstrap) pentru înscrierea în WordPress și încărcarea componentelor pluginului.
  • Pluginul va avea nevoie de o clasă care să coordoneze cârligele și callback-urile utilizate în plugin. Acest lucru va ajuta la decuplarea funcționalității de la cârligele și de la cursurile responsabile de afișarea efectivă a lucrării, ceea ce ne permite să ne asigurăm că fiecare dintre clasele noastre este specializată și, în mod ideal,.
  • Plugin-ul va avea nevoie de o clasă care va fi responsabilă pentru afișarea informațiilor în tabloul de bord unic care va face efectiv caseta meta. 
  • Vom avea nevoie de o clasă de plugin-uri care să înregistreze toate dependențele și să furnizeze informații despre versiunea plug-in-ului, să cunoască încărcătorul și funcționalitatea de administrare pentru a înregistra informații între cele două componente.
  • În sfârșit, vom avea nevoie de câteva foi de stil pentru a ne asigura că informațiile arată bine în tabloul de bord.

Sunet confuz? Sperăm că văzând și aruncând o privire la structura fișierelor și la exemplul de bază, vom continua să avem mai multă sens.

Cu acest lucru, să luăm o privire la nivel înalt asupra componentelor care vor interacționa între ele, apoi vom analiza modul în care vor fi organizate fișierele. După aceea, vom intra în stubbing codul pentru pluginul pe care vom completa în următorul articol.

Plugin Components

În mod specific, plugin-ul va consta din următoarele componente - sau fișiere - care vor alcătui sursa pluginului. După ce aruncăm o privire la listarea de fișiere, vom examina o diagramă a modului în care toate piesele vor interacționa.

  • un singur post-meta-manager.php este fișierul primar care înregistrează pluginul cu WordPress și pune totul în mișcare.
  • clasa-un singur post-meta-manager-admin.php este fișierul care este responsabil pentru înregistrarea și întocmirea foilor de stil, precum și afișarea elementelor interfeței utilizator care vor conține meta date post.
  • un singur post-meta-manager-admin.css este foaia de stil care va modela interfața cu utilizatorul.
  • clasa-un singur post-meta-manager-loader.php este fișierul care va coordona acțiunile și filtrele între plugin-ul principal și clasa de administrare.
  • clasa-un singur post-meta-manager.php este fișierul cu plugin-ul principal care menține informații despre versiunea pluginului, informații despre plug-in-uri, referințe la încărcător și fișierul în care instruim încărcătorul ce obiecte și funcții sunt responsabile pentru afișarea interfeței de administrare.
  • README.md oferă instrucțiunile obișnuite despre cum să începeți cu pluginul.
  • CHANGES.md oferă o listă de modificări care apar în fiecare versiune a pluginului pe care îl lansăm.

În funcție de nivelul dvs. de experiență cu programarea orientată pe obiecte, acest lucru poate sau nu poate părea o mulțime de fișiere pentru un set relativ simplu de caracteristici; cu toate acestea, mai sunt și mai multe: nu vom renunța la toate aceste fișiere în rădăcina directorului plugin.

În schimb, o să facem un pas mai departe și să organizăm lucruri și în directoarele corecte. Odată ce vom revedea acest lucru, vom examina apoi organizarea componentelor sub forma unei diagrame, iar apoi vom examina codul care furnizează schela pentru plugin.

Organizarea fișierelor

Organizarea fișierelor este relativ simplă și este, probabil, cel mai bine demonstrată prin utilizarea unei imagini:

Pentru a fi clar, iată descompunerea a ceea ce vedeți în captura de ecran de mai sus:

  • admin / clasa-un singur post-meta-manager-admin.php
  • admin / css / single-post-meta-manager.admin.css
  • include / clasa-un singur post-meta-manager-loader.php
  • include / clasa-un singur post-meta-manager.php
  • limbi /
  • un singur post-meta-manager.php
  • CHANGES.md
  • README.md
  • license.txt

Acest lucru este important pentru a recunoaște și există câteva locuri în codul în care vom înregistra dependențe și este important să știm Unde dependențele sunt astfel încât să putem oferi căile potrivite pentru ei.

Construirea pluginului

În acest moment, suntem gata să începem să stingem clasele pe care le vom folosi. Există câteva lucruri importante pe care trebuie să le țineți cont de codul pe care urmează să îl vedeți:

  • Vom face doar să stingem clasele și metodele - nu vom introduce o funcționalitate reală în acest articol.
  • Până la sfârșitul implementării, plugin-ul ar trebui să apar în tabloul de bord WordPress și pot fi activate (deși nu se va întâmpla nimic).
  • În ciuda faptului că consider că documentația este esențială pentru dezvoltarea calității, nu vom introduce comentariile din acest articol, pentru că există un compromis care trebuie făcut: acest articol poate deveni excesiv de lung cu o cantitate extraordinară de detaliu sau putem continua pentru a lua fiecare aspect al acestei serii pas cu pas. Opresc să o fac pe acesta din urmă, pentru a nu fi copleșiți de cantitatea de informații.

Cu aceasta a spus, dacă aveți întrebări despre cod, nu ezitați să lăsați comentarii despre acest lucru; cu toate acestea, aș putea spune așteptați până la următorul articol pentru a vedea răspunsul.

Acum, la codul.

Fișierul Plugin Core

Fișierul cu plugin-ul principal este responsabil pentru înregistrarea plugin-ului cu WordPress și, în cele din urmă, va fi responsabil pentru importul clasei plugin-ului principal (pe care o vom revizui doar puțin) și, de fapt, setarea pluginului în mișcare.

Rețineți că condiționarea pe care o avem în partea de jos a fișierului. Acest lucru vă va asigura că fișierul plugin nu poate fi accesat direct în browserul web.

Fișiere administrative

Toate aceste fișiere se află în admin directorul menționat mai sus.

Clasa administratorului unic de mesaje Meta Manager

Această clasă va închide foaia de stil și va afișa caseta meta care va fi utilizată pentru a afișa postul meta dat.

versiune = $ versiune;  funcția publică enqueue_styles ()  funcția publică add_meta_box () 

În această clasă, observați că are un singur atribut protejat pentru $ versiune a pluginului. Acest atribut este setat în constructorul clasei.

Vom vedea cum se va potrivi acest lucru mai târziu în cod.

Foaia de stil pentru Managerul unic de posturi Meta

În acest moment, nu există niciun cod de afișat pentru acest fișier; cu toate acestea, mergeți mai departe și adăugați-l la admin / css subdirector ca fiind ceea ce vom folosi în cele din urmă pentru a modela tabloul de bord.

include

Acestea sunt fișiere de plugin-uri principale care sunt responsabile pentru coordonarea informațiilor între diferitele cârlige și zona administrativă a plugin-ului.

Un singur mesaj de încărcare Meta Manager

Această clasă va fi utilizată de clasa principală a pluginurilor pentru a coordona toate cârligele existente în plugin și clasa administrativă pe care am definit-o mai sus.

Observați că în clasa de mai sus, am marcat atributele ca protejat. Acest lucru se face astfel încât această clasă să aibă acces la atributele sale, dar nu și alte clase.

În plus, am continuat și am făcut acest lucru doar în cazul în care subclasăm această clasă specială într-o viitoare iterație a pluginului.

Un singur manager de posturi Meta Post

În cele din urmă, avem clasa principală a plugin-ului este responsabilă pentru încărcarea dependențelor, setarea localului și coordonarea cârligelor.

plugin_slug = 'un singur post-meta-manager-slug'; $ this-> version = '0.1.0';  funcția privată load_dependencies ()  funcția privată define_admin_hooks ()  funcția publică execută ()  funcția publică get_version () return $ this-> version; 

Observați în codul de mai sus, avem în plus protejat atribute, câteva privat funcții și a public funcție folosită ca un getter pe care îl vom folosi pe măsură ce vom continua să construim pluginul.

În următorul articol, vom petrece mult timp în această clasă, deoarece acesta este punctul de intrare în cazul în care se petrece o mulțime de funcționalitate.

Urmeaza

Am acoperit o mulțime de materiale în acest articol, dar evident că sunt multe de făcut. În afară de furnizarea de documentații pentru funcțiile noastre, trebuie să implementăm de fapt funcționalitatea care aduce viață acestui schelă.

În următorul articol din serie, vom face exact acest lucru, după care ne vom îndrepta atenția asupra documentării codului.

Așa cum am menționat anterior, vă rugăm să nu ezitați să puneți întrebări și / sau comentarii despre codul de mai sus. Pentru cei interesați, puteți naviga la starea actuală a proiectului pe GitHub.

Până la următorul articol!

Cod