Anatomia unui Plugin WordPress

WordPress este bine cunoscut pentru colecția sa uimitoare de plugin-uri gratuite. Există una pentru aproape orice nevoie
vă puteți gândi, de la copierea de rezervă a instalației dvs. WordPress la întrebarea pentru o ceașcă de cafea
sau combaterea spamului.

Dar sunt momente când nici unul dintre plugin-urile disponibile nu pare să facă destul de trucul pe care îl căutați. Pentru a vă ajuta în momente cum ar fi
că acest tutorial vă va ghida în fiecare pas al construirii unui plugin simplu, widgetized WordPress cu setări.


Scrierea propriului plugin nu este o știință pentru rachete rezervată celor mai inteligenți programatori. Tot ce ai nevoie
este o înțelegere de bază a
limba de programare PHP și câteva informații despre modul în care WordPress se așteaptă ca pluginul dvs. să se comporte. Acest tutorial vă va oferi cele din urmă.

Scopul

Înainte de a începe, permiteți-mi să vă prezint conceptul de plugin și ceea ce încercăm să realizăm cu el.

"Coming Next" va fi un plug-in widget care interoghează un anumit număr de postări de blog programate pentru viitor și le afișează în bara laterală a blogului
proprietarul blogului decide să plaseze widget-ul). Widgetul va fi personalizabil, astfel încât utilizatorul să poată decide câte posturi vrea să enumere,
dacă ar trebui afișat un rezumat al postului și care ar trebui să fie formatul datei. Aspectul widget-ului ar trebui să fie ușor de personalizat prin CSS.

Iată un desen rapid al modului în care widgetul ar putea arăta în acțiune:


Să începem!

Pasul 1: Șablonul Plugin

Pluginurile în WordPress sunt fișiere PHP care au fost introduse în wp-content / plugins în directorul de instalare WordPress.

Pentru plugin-uri simple care se potrivesc frumos într-un singur fișier, cum ar fi cel pe care îl creați astăzi, este suficient să creați un singur fișier PHP și să-l încărcați în
plugin director. Cu toate acestea, este o practică bună să creați întotdeauna un director separat pentru fiecare plugin și, astfel, să îi ajutați pe proprietarii de bloguri să își păstreze pluginurile
organizat. Acest lucru va facilita, de asemenea, extinderea pluginului dvs. dacă vreodată trebuie să adăugați fișiere noi la acesta.

Să creăm un director pentru pluginul "Coming Next":


Adresă creată: / wp-content / plugins / coming-next

În acest director nou, vom crea fișierul PHP principal al pluginului. Să spunem asta coming-next.php.

Când căutați pluginuri, WordPress trece prin fiecare fișier din directorul plugin, în căutarea unor comentarii care identifică fișierele ca pluginuri. Acea
secțiunea de comentarii spune informații de bază despre plugin și trebuie să conțină numele pluginului la minim.

Iată cum blocul de comentarii pentru pluginul nostru "Coming Next" va arăta astfel:

 

Salvați fișierul și accesați pagina de pluginuri din zona de administrare WordPress. Pluginul, cu toate informațiile adăugate în comentariu,
este deja vizibil în lista de pluginuri:


Acesta este modul în care pluginul apare în lista pluginurilor

Puteți deja să activați plugin-ul, dar deoarece nu am introdus încă niciun cod, nimic nu se va întâmpla. Avem nevoie de câteva funcționalități.

Pasul 2: Adăugarea funcționalității

În forma sa cea mai simplă, un plugin WordPress nu este altceva decât una sau mai multe funcții plasate în interiorul unui fișier de plugin.

Toate funcțiile create în pluginuri sunt vizibile atât pentru tema curentă, cât și pentru celelalte plugin-uri active, astfel încât este posibil să

utilizați sistemul plugin pentru a extinde platforma cu noi funcții și apoi apelați-le direct din tema.

Să facem asta mai întâi și să creăm funcția de bază a pluginului "Coming Next", list_upcoming_posts ().

Un cuvânt de avertizare este în vigoare înainte de a începe: Pentru că toate funcțiile adăugate în fișierele plugin-ul vor fi vizibile pe tot parcursul
Instalarea WordPress, trebuie să fii foarte atent când îi numeri. Dacă există două funcții cu același nume
în două (sau mai multe) plugin-uri diferite, acestea vor intra în conflict și lucrurile nu pot funcționa.

Pentru pluginurile mai mari este o idee bună să faceți unele programări orientate obiect și să creați clase pentru a încapsula părți
a funcționalității. Acest lucru vă va oferi mai multă libertate în denumirea funcțiilor și variabilelor. În pluginuri mai mici cum ar fi
aceasta trebuie doar să fii atent și să încerci să folosești nume de funcții descriptive pe care nu le folosești nimeni altcineva.

 funcția list_upcoming_posts ($ num_posts = 1, $ show_excerpt = false, $ text_format = "Coming Up on [date]") $ posts = get_posts ("numberposts =" $ num_posts "& comanda = ASC & post_status = future); ecou "
    ($ post = $ post): setare_postdata ($ post); $ my_date = the_date (",", ", FALSE); $ coming_up_text = str_replace ("[data]", $ my_date, $ text_format); ?>
  • ";

Această funcție utilizează funcția get_posts () WordPress
pentru a recupera cât mai multe posturi viitoare, după cum se specifică în $ NUM_POSTS parametru sau toate postările viitoare
dacă $ NUM_POSTS este mai mare decât numărul real disponibil.

Apoi, face o listă care include titlurile posturilor, datele lor programate și extrasul postului dacă $ show_excerpt este setat la true.

Rețineți că trebuie să utilizați documentul global $ postare variabilă pentru a configura datele postului (a se vedea linia 10) pentru apelurile funcționale, cum ar fi
la fel de titlul() a munci. Acum, în cazul în care șablonul de blog are nevoie de acces la postarea curentă după redarea pluginului,
trebuie să punem înapoi postul inițial odată ce terminăm (vezi liniile 7 și 26-27). Altfel, restul conținutului ar fi redat utilizând ultima
post care a fost creat folosind setup_postdata ().

Felicitări! Tocmai ați scris primul plugin WordPress și îl puteți testa prin adăugarea acestui apel undeva în șablonul dvs. de blog:

 

Creați un post intitulat "Înapoi în viitor" și programați-l să apară pe blogul dvs. la 1 ianuarie 2020. Iată ce ar trebui să vedeți:


Pluginul în acțiune. Fără stilul CSS încă.

Pasul 3: Realizarea unui widget

Pentru unele pluginuri, doar funcția pe care o puteți apela din tema dvs. este mai mult decât suficientă. Dar pentru acest plugin, cred că lăsându-l pe utilizator
personalizați ieșirea prin pagina de admin WordPress va oferi o atingere finală frumos. Și sistemul widget WordPress este calea perfectă
să atingă acel nivel de utilizare prietenos.

În cazul în care nu sunteți încă familiarizat cu conceptul de WordPress Widgets,
iată ce spune documentația WordPress despre ei:

Widgeturile WordPress permit adăugarea ușoară a elementelor de design, a obiectelor gadget, a conținutului, a imaginilor și a altor elemente spre bara laterală WordPress pentru a personaliza
blogul dvs. fără a cunoaște HTML, PHP sau orice alt cod. Multe pluginuri WordPress vin acum cu o versiune Widget pentru a permite adăugarea ușoară în bara laterală.

Dacă tema dvs. acceptă widget-uri, puteți accesa fila Widgets din secțiunea Design din zona de administrare WordPress și puteți atribui widget-uri diferitelor
poziții pe care designerul tematic le-a creat:


Ecranul setărilor "Widgets"

Pentru ca plugin-ul nostru "Coming Next" să funcționeze ca widget, trebuie mai întâi să creăm o funcție pentru redarea widget-ului. Cum putem reutiliza
list_upcoming_posts () funcția pe care am creat-o mai devreme, această sarcină va fi destul de simplă.

Iată codul pentru widget în forma sa cea mai simplă:

 funcția widget_coming_next ($ args) extract ($ args, EXTR_SKIP); echo $ before_widget; list_upcoming_posts (); echo $ after_widget; 

Toată funcția este că extrage marcajul HTML pe care tema de designer a creat-o pentru a fi redat înainte ($ before_widget) și
după ($ after_widget) fiecare widget, apoi îl redă în jurul listei posturilor viitoare.

extrage() funcția este standard PHP.
Se iau câmpurile din matricea dată ($ args) și creează variabile locale din ele. O altă modalitate
a face același lucru ar fi fost de a face referire la matrice direct folosind "before_widget" și "after_widget" ca indici matrice.

Acum widgetul știe cum să se facă. Dar înainte ca acesta să poată fi adăugat la un blog, trebuie încă să-i spunem lui WordPress să îl adauge la listă
de widget-uri pe pagina de administrare. Aceasta se face prin crearea unei funcții de inițializare care înregistrează widget-ul lateral și adăugarea
un plug cârlig pentru a apela această funcție după toate WordPress
pluginurile au fost încărcate în memorie.

 funcția widget_coming_next_init () wp_register_sidebar_widget (COMING_NEXT_WIDGET_ID, __ ('Coming Next'), 'widget_coming_next');  // Înregistrați widgetul în WordPress add_action ("plugins_loaded", "widget_coming_next_init");

Funcția de inițializare a apelurilor wp_register_sidebar_widget ()
pentru a înregistra widget-ul la WordPress. Funcția are nevoie de trei parametri: un identificator unic pentru widget, un nume care va fi utilizat în widget-uri
pagina din zona de administrare și numele funcției care va afișa widget-ul.

Pentru a face lucrurile mai ușoare, dacă trebuie vreodată să schimbăm identificatorul unic, am creat o constantă pentru acesta. În acest fel, când folosim aceeași constantă peste tot,
va trebui doar să îl actualizăm într-un singur loc. Adăugați această definiție constantă la începutul fișierului widget imediat după blocul de comentarii care identifică pluginul:

 definiți (COMING_NEXT_WIDGET_ID, "widget_coming_next");

Acum, când vizitați pagina "Widgets", veți vedea widget-ul nou așteptat să fie adăugat pe blog. Și când adăugați
widget-ul la o pozitie widget, veti vedea posturile viitoare care apar acolo unde le-ati pus!


Widgetul "Coming Next" a fost adăugat în lista widgeturilor.

Pasul 4: Setările widgetului

În sfârșit, pentru a finaliza pluginul, vom crea un meniu de setări pentru actualizarea preferințelor widgetului. Caseta cu setări va conține toate aceleași informații
parametrii ca list_upcoming_posts () funcționează ca parametri. Deoarece această funcție a fost deja făcută și
știe cum să se ocupe de parametri, tot ce rămâne este construirea meniului de setări și făcându-l să salveze și să recupereze setările.

La fel ca pentru randarea widget-ului, vom crea o funcție care redă meniul de setări și stochează setările
în spațiul de stocare persistent și apoi spuneți WordPress despre această funcție, astfel încât să știe să o arate atunci când adaugă sau editează widget-ul.

Iată codul pentru stocarea și retrimiterea setărilor:

 funcția widget_coming_next_control () $ options = get_option (COMING_NEXT_WIDGET_ID); dacă (! is_array ($ opțiuni)) $ options = array ();  $ widget_data = $ _POST [COMING_NEXT_WIDGET_ID]; dacă ($ widget_data ['trimite']) $ opțiuni ['num_posts'] = $ widget_data ['num_posts']; Opțiuni $ ['coming_up_text'] = $ widget_data ['coming_up_text']; $ opțiuni ['show_excerpt'] = $ widget_data ['show_excerpt']; update_option (COMING_NEXT_WIDGET_ID, opțiuni $);  // Formă de redirecționare $ num_posts = $ opțiuni ['num_posts']; $ coming_up_text = $ opțiuni ['coming_up_text']; $ show_excerpt = $ opțiuni ['show_excerpt']; // Formularul HTML va merge aici

Inima acestei funcții sunt cele două apeluri către API-ul WordPress:
get_option () pe linia 2 și
update_option () pe linia 13.
update_option () poate fi folosit pentru a salva orice variabilă în baza de date WordPress ca o pereche cheie-valoare și get_option la
Citește.

De exemplu, în fragmentul de cod de mai sus, îl veți vedea pe linia 13, update_option () este folosit pentru a stoca opţiuni de $ array cu
cheie COMING_NEXT_WIDGET_ID.

Pentru a face lucrurile mai organizate, în loc să salvăm fiecare variabilă ca o pereche separată cheie-valoare, le punem într-un
array (opţiuni de $) care pot fi salvate dintr-o dată.
Această matrice păstrează apoi toate datele legate de acest widget. Matricea este încărcată la începutul funcției, astfel încât datele să fie disponibile
pentru redarea formularului de setări și a setărilor existente pot fi folosite ca valori implicite ale formularului și nu se vor pierde la trimiterea formularului.

widget_coming_next_control () funcția se numește atât atunci când formatul de setări este afișat pentru prima oară, cât și când utilizatorul apasă butonul "Salvați modificările"
pentru a stoca setările. Pentru a identifica dacă formularul a fost trimis sau nu, folosim un câmp ascuns
denumit COMING_NEXT_WIDGET_ID [submit]. Dacă câmpul ascuns a fost salvat, citim în parametrii din
formați-le și salvați-le (linii 8-14). Și în ambele cazuri, dacă datele sunt salvate sau nu, formularul este redat.

Vorbind despre formulare, acea parte esențială lipsește. Copiați formularul de mai jos și puneți-l la sfârșitul funcției pe care tocmai am creat-o
(imediat după rândul 21, înaintea brațului de închidere):

 ?> 

-textul următor ">" Coming Up Next "(utilizați eticheta [date] pentru a afișa data publicării): -show-excerpt "> Afișați extrasul:

Dacă priviți cu atenție formularul, veți observa că nu există etichete care să deschidă sau să se termine. Acest lucru se datorează faptului că toate widgeturile active sunt
în aceeași formă, redată de WordPress și salvate la o singură apăsare a textului "Salvați modificările". Acest lucru va fi util atunci când decideți să scrieți
un widget care poate fi adăugat de multe ori, cum ar fi widget-ul textului WordPress (atunci când faci asta, va trebui să fii conștient de mai multe widget-uri
și toate statele lor diferite în același timp). Dar pentru moment, înseamnă doar că trebuie să fii atent cu cum îți numești câmpurile din partea ta a formularului.

În acest plugin, am decis să folosesc COMING_NEXT_WIDGET_ID constantă ca un identificator pentru a defini care dintre câmpuri aparțin acestui widget.
Utilizarea WIDGET_ID [FIELD_ID] notație în Nume parametrii noștri intrare etichetele fac lucrurile
frumos pentru noi, pe măsură ce parsează într-o matrice FIELD_ID ca indice de matrice.

După crearea funcției ecranului de setări, trebuie încă să le spunem WordPress să o folosească. Acest lucru se face cu următorul cârlig.
Adăugați-l la widget_coming_next_init () funcție pe care am creat-o mai devreme:

 wp_register_widget_control (COMING_NEXT_WIDGET_ID, __ ('Coming Next'), 'widget_coming_next_control');

Acum, când accesați sau editați widgetul, veți vedea că au apărut noi opțiuni:


Widgetul are acum setări

Nu în ultimul rând, vom face ca widget-ul să utilizeze setările definite în caseta de setări. Este foarte simplu: tot ce trebuie
faceți este să citiți setările folosind get_option () funcţie. Înlocuiți funcția de randare widget creată anterior
această nouă versiune:

 funcția widget_coming_next ($ args) extract ($ args, EXTR_SKIP); $ opțiuni = get_option (COMING_NEXT_WIDGET_ID); // Cereți următoarea postare programată $ num_posts = $ opțiuni ["num_posts"]; $ show_excerpt = $ opțiuni ["show_excerpt"]; $ coming_up_text = $ opțiuni ["coming_up_text"]; echo $ before_widget; list_upcoming_posts ($ num_posts, $ show_excerpt, $ coming_up_text); echo $ after_widget; 

Asta e. Ați creat acum un widget WordPress cu setări!
Rezultatul încă arată destul de plictisitor, dar cu o mică atingere de CSS, va veni în viață și va fi o potrivire perfectă cu tema dvs. de blog.


Următorul widget Coming Next trăiește în acțiune
Cod