Reel 'em In înțelegerea cârligelor din interior

Cheia pentru fundamentarea flexibilă a lui WordPress este utilizarea de cârlige. Fie că este vorba despre teme, pluginuri sau nucleu, cârligele permit o creștere fără precedent, asigurând în același timp compatibilitatea cu versiunile viitoare ale WordPress. Ca urmare, înțelegerea acestora ar trebui să fie, fără îndoială, o parte a oricărui repertoriu al dezvoltatorului. Alăturați-vă în timp ce descoperim complexitatea acestui sistem simplu și totuși sofisticat din interior.

Ca o foaie de parcurs pentru acest articol, vom trece peste conceptul din spatele cârligelor, implementarea lor și, desigur, exemple.


Concept: Ce și de ce?

"Puneți pur și simplu, un cârlig este un înlocuitor pentru o acțiune."

În spatele fiecărui software bine scris este un concept solid care răspunde la întrebările de ce și de ce. Cârligele nu fac excepție. Puneți pur și simplu, un cârlig este un substituent pentru o acțiune. Atunci când apare un eveniment semnificativ, cum ar fi publicarea unui post, este activat un cârlig care permite efectuarea unor reacții relevante. În termeni de dezvoltatori, se poate gândi la cârlige ca la implementarea unui sistem bazat pe evenimente.

Mai mult decât o definiție, un concept necesită raționament care să elucideze motivul pentru care este util. Cârlige joacă un rol integral în WordPress, datorită naturii în continuă evoluție a proiectului. Cu sute de dezvoltatori care actualizează în mod constant sistemul, nu este posibilă editarea fișierelor de bază pentru fiecare plugin, temă sau personalizare specială, deoarece acestea se vor schimba frecvent. În schimb, este necesar un cadru pentru extinderea sistemului - pentru a permite funcționalității externe să aibă un efect la fel de mare ca și manipulările interne. Cârligele sunt cheia acestui cadru.


Implementare: Cum?

Ca dezvoltator, rolul este extins pentru a înțelege nu numai ceea ce face sau de ce se face, ci și pentru a realiza cum este creat. Cu alte cuvinte, pentru a înțelege pe deplin sistemul de cârlige, trebuie să înțelegem modul în care sunt implementate.

La fel ca într-un test cu multiple opțiuni, însă, privirile direct la răspunsuri nu sunt neapărat cea mai bună idee. Așa cum sugerează mai multe strategii de testare, este adesea mai bine să citiți întrebarea, să vă formulați propriile gânduri despre răspuns și apoi să alegeți alegerea care seamănă cel mai mult cu raționamentul dvs. O metodă similară poate fi pusă în aplicare atunci când se înțelege implementările de dezvoltare software; mai degrabă decât să vă uitați la codul altcuiva pentru a înțelege modul în care se realizează o caracteristică, este adesea chiar mai util să o implementați mai întâi și apoi să vă întoarceți pentru a examina modul în care este efectiv realizată. Exact asta vom face.

Mai degrabă decât să vă uitați la codul altcuiva pentru a înțelege modul în care este realizată o caracteristică, este adesea chiar mai util să o implementați mai întâi și apoi să vă întoarceți să examinați cum se face.

Infertând din documentație

Pentru a obține informații despre modul în care este implementat un sistem, documentația este adesea un început util. Să examinăm rezumatele celor două funcții de bază ale cârligului WordPress conform Codului:

  • add_action ($ hook, $ function [, prioritate $, $ numArgs]]) - Specifică un handler de funcții, funcţia $, pentru a fi numit odată un anumit cârlig, $ cârlig, este activată din cauza producerii unui eveniment. prioritate $ determină dacă acest handler de funcții este apelat înainte sau după alte dispozitive de manipulare a funcțiilor și implicit la 10. Rezultatele inferioare determină o funcție numită mai devreme și invers. $ numArgs este numărul de argumente pe care le va prelua funcția de gestionare a funcțiilor și valoarea implicită la 1.
  • do_action ($ hook [, $ arg1 [, $ arg2 [, $ arg3 [,?]]]]) - Activează un anumit cârlig, $ cârlig, prin apelarea tuturor funcțiilor de manipulare cu argumentele opționale $ ARG1, $ arg2, $ Arg3, etc.

Cu documentația în mână, este timpul să facem câteva concluzii cu privire la aceste două funcții. ADD_ACTION trebuie doar să asocieze o funcție, prioritate și un număr de argumente cu un șir. Acest lucru pare a fi locul perfect pentru o matrice PHP, care acționează în mod dual ca o hartă hash care stochează perechi cheie-valoare. do_action este chiar mai trivial, necesitând o privire simplă în sus în aceeași matrice pentru a găsi funcția corespunzătoare de manipulare și ulterior apelarea acestora. Având în vedere informațiile noastre, este timpul să mergem la punerea în aplicare.

Aplicând Cunoștințele noastre

Pentru că facem acest lucru pentru a obține informații despre sistemul de cârlig WordPress, nu este nevoie să implementați aceste două funcții în mod documentat. În schimb, să ne concentrăm asupra implementărilor lor, fără argumentele opționale, pentru a economisi timp și pentru a obține în continuare esența ei.

Înainte de a începe, să prezentăm o schiță:

  • Avem nevoie de o matrice globală accesibilă ambelor funcții.
  • ADD_ACTION va stoca numele de cârlig dat și un set de handlers de funcții corespunzătoare ca o pereche cheie-valoare în matrice.
  • do_action va prelua operatorii corespunzători pentru un anumit nume de cârlig și îi va apela pe fiecare.

Aceasta produce următorul cod:

$ acțiuni = array (); funcția add_action ($ hook, $ function) acțiuni globale $; // a crea o serie de handlers de funcții dacă aceasta nu există deja dacă ($ isset ($ actions [$ hook]) $ acțiuni [$ hook] = array (); // adăugați funcția curentă la lista de acțiuni $ actions [$ hook] [] = $ function;  funcția do_action ($ hook) acțiuni globale $; dacă isset ($ actions [$ hook])) // apelează fiecare handler de funcții asociat cu acest precursor de cârlig ($ actions [$ hook] ca $ function) call_user_func ($ function); 

Nu e rau; am implementat un sistem de cârlig versatil în aproximativ 20 de linii de cod. Acum, că am obținut o idee despre cum funcționează cârligele, să ne aruncăm în codul de bază WordPress pentru a confirma ipoteza noastră.

Un instrument pentru a naviga rapid prin acest cod este Yoast's Cross Reference PHP al Sursa WordPress. Căutare de ADD_ACTION produce următorul cod:

funcția add_action ($ tag, $ function_to_add, $ priority = 10, $ accept_args = 1) returnați add_filter ($ tag, $ function_to_add, $ priority, $ accepted_args);  funcția add_filter ($ tag, $ function_to_add, $ priority = 10, $ accept_args = 1) global $ wp_filter, $ merged_filters; $ idx = _wp_filter_build_unique_id ($ tag, $ funcție_to_add, $ prioritate); $ wp_filter [$ tag] [$ prioritate] [$ idx] = array ('function' => $ function_to_add, 'accept_args' => $ accept_args); dezactivat ($ merged_filters [$ tag]); return true; 

ADD_ACTION apeluri add_filter care, în mod surprinzător, adaugă funcția dată unei serii introduse de numele cârligului, $ tag-ul. Deși există un pic mai mult implicat datorită prioritate $ și $ accepted_args parametrii, această funcție este, în esență, de acord cu propria noastră, confirmând suspiciunile noastre. do_action, deși mai mult și mai puțin complex, se reduce la următorul cod:

funcția do_action ($ tag, $ arg = ") [Codul omite care înregistrează statisticile, argumentele proceselor și se ocupă cu filtrele] face foreach (array) curent ($ wp_filter [$ tag] este_null ($ a _ ['function'])) call_user_func_array ($ funcția '' '', array_slice ($ args, 0, (int) $ _ ['accept_args' tag]]! == false); [codul care a fost curățat]]

Buclele prin funcțiile asociate și chemarea fiecăruia nu este ciudat pentru noi toți; de fapt, exact ceea ce am emis ipoteza în implementarea noastră. În consecință, pornind de la propriile noastre gânduri despre cod nu numai că ne-a ajutat să înțelegem mai bine acest lucru, dar, de asemenea, am avut nevoie de o gândire critică și o rezolvare a problemelor care este esențială pentru dezvoltarea de software.


Exemple

Cu înțelegerea noastră despre ceea ce, de ce și cât de bine în mână, este timpul să trecem la două exemple. Primul este un joc pe RSS; mai degrabă decât furnizarea de notificări prin sindicalizare, de ce nu utilizați în schimb e-mail?

Sistem de notificare prin e-mail

Pentru a implementa sistemul nostru, va trebui să căutăm când se publică o postare. Dar ce cârlig ar trebui să-l folosim? Referința de acțiune API oferă o listă de cârlige împreună cu descrierile evenimentelor asociate care ne pot ajuta să identificăm exact acest lucru. Într - adevăr, publish_post descrierea cârligului se potrivește cu ceea ce avem nevoie, deci să adăugăm un handler de funcții:

add_action ('publish_post', 'notify_via_email');

Tot ce a mai rămas este să trimiteți o notificare prin e-mail unei persoane din notify_via_email funcția de manipulare a funcțiilor. Rețineți că referința de acțiune API specifică faptul că publish_post cârligul trece ID-ul postului ca argument al funcției noastre de manipulare. Acest lucru ne va permite să obținem informații despre post prin get_post funcția, cum ar fi:

funcția notify_via_email ($ post_id) $ post = get_post ($ post_id); $ to = '[email protected]'; $ subject = 'Post publicat pe'. get_bloginfo ("nume"); $ message = $ post-> post_title. "a fost publicat pe". get_bloginfo ("nume"). "din". $ post-> post_date. “. Puteți să o vedeți la '. get_permalink ($ post_id). ''; wp_mail ($ la, $ subiect, $ mesaj); 

După preluarea postului, vom folosi titlul, data și permalink-ul în mesajul nostru de poștă electronică. Apoi este trimis prin wp_mail care necesită un destinatar, un subiect și un mesaj ca parametri. Prin urmare, sistemul nostru simplu de notificare prin e-mail este complet. Rețineți că nu este recomandat să apelați wp_mail de multe ori deodată, deoarece este obligat să prezinte o întârziere semnificativă în timpul încărcării paginii odată ce este apăsat butonul Post Post.

Plugin Google Analytics

La început, s-ar părea că o temă este un mediu mai potrivit pentru un astfel de cod. Dimpotrivă, prin faptul că tema site-ului este susceptibilă de revizuire și de schimbare. Ca rezultat, codul de analiză s-ar putea pierde ușor într-o tranziție de la o temă la alta.

Desi usor contrived, prima noastra aplicatie a fost o introducere rapida in utilizarea cârligelor. Acest al doilea exemplu, cu toate acestea, se va oferi mult mai mult pentru utilizarea în lumea reală. Vom crea un simplu plugin Google Analytics care introduce automat codul de urmărire în subsolul paginii.

La început, s-ar părea că o temă este un mediu mai potrivit pentru un astfel de cod. Dimpotrivă, prin faptul că tema site-ului este susceptibilă de revizuire și de schimbare. Ca rezultat, codul de analiză s-ar putea pierde ușor într-o tranziție de la o temă la alta. Crearea unui plugin depășește acest dezavantaj; deoarece va rămâne activă indiferent de ce temă este folosită, codul de analiză va fi în continuare prezent și va elimina necesitatea menținerii temelor.

Dar cum introducem codul în subsolul unui site web? Și asta se face prin cârlige. Dacă ați lucrat mai devreme pe temele WordPress, probabil ați sunat wp_head și wp_footer funcții în cap și subsol al site-ului dvs., respectiv. Ambele funcții sunt prezente pentru a activa pur și simplu cârligele astfel încât pluginurile să poată introduce cu ușurință codul în aceste zone vitale ale paginii. În consecință, vom adăuga pur și simplu o acțiune la wp_footer cârlig:

add_action ('wp_footer', 'add_google_analytics_code');

Al nostru add_google_analytics_code funcția, așa cum sugerează și numele, imprimă codul Google Analytics:

  

Nu uitați să vă schimbați UA-XXXXX-X la ID-ul dvs. de site-ul și sunteți cu toții setați! Doar adăugați acest cod într-un fișier și încărcați-l în directorul de pluginuri WordPress. Asigurați-vă că ați introdus un antet de plugin, așa cum este cazul:

Nu uitați să schimbați numele autorului, URI-ul autorului și, desigur, să activați pluginul!


Concluzie

Prin divizarea cârligelor într-un concept, o implementare și exemple, le-am examinat efectiv din interiorul corelului WordPress spre exterior într-o aplicație din lumea reală. Mai degrabă decât să ne uităm la codul de bază WordPress, am implementat propria noastră versiune de cârlige prin inferență, permițându-ne să obținem o înțelegere mai profundă, asemănătoare dezvoltatorului, a acestui sistem puternic. În cele din urmă, cu o aplicație Google Analytics Plugin reală, am obținut informații preliminare despre cât de de cît de utile ar putea fi cârligele. Asigurați-vă că vă alăturați data viitoare și vă simțiți liberi să împărtășiți propriile dvs. utilizări inovatoare de cârlige în comentariile de mai jos!

Cod