Cârligele de acțiune și filtrare reprezintă o parte fundamentală a diferitelor API-uri WordPress. Fără ele sunteți limitat la ceea ce puteți face în teme și (în special) în pluginurile dvs..
Dar, uneori, poate fi ușor să confundăm cele două, mai ales în cazul în care WordPress are atât un cârlig de acțiune cât și un cârlig de filtrare cu același nume.
În acest articol voi defini acțiuni și cârlige de filtrare și voi descrie diferența dintre ele și voi demonstra cum să le folosiți în temele și pluginurile dvs. De asemenea, voi da câteva exemple de când ați putea folosi fiecare.
Atunci când adăugați acțiuni și cârlige de filtrare în codul dvs. (sau le atribuiți funcții), vă ajută să înțelegeți cum sunt numite acțiunile și filtrele de WordPress și ce se întâmplă în ce ordine. Nu voi acoperi acest lucru în detaliu aici, deoarece avem un alt tutorial care face acel loc de muncă.
Să începem cu câteva definiții. Voi defini acțiuni și cârlige și funcții de filtrare, astfel încât să puteți vedea diferența dintre toate.
Funcțiile sunt primul lucru cu care lucrează cei mai mulți oameni atunci când învață dezvoltarea WordPress; dacă ați adăugat un cod la tema proprie functions.php
fișier, atunci ați scris o funcție.
Funcțiile specifică modul în care se va întâmpla ceva. Codați o funcție pentru interogarea datelor, pentru a ieși din conținut sau pentru a efectua multe alte sarcini. Puteți să apelați (executați) funcții direct în fișierele de șablon ale temelor dvs. sau le puteți activa în acțiuni sau în cârligele de filtrare. Funcțiile pot include, de asemenea, etichete șablon, cum ar fi etichete condiționate, pentru a specifica când trebuie să se aplice această funcție.
Vă voi arăta diferitele modalități de a executa funcții mai târziu în acest articol.
Cârligele de acțiune (sau acțiunile) sunt declanșate atunci când are loc ceva, cum ar fi încărcarea unei pagini, conectarea unui utilizator sau o acțiune personalizată pe care o definiți în tema sau pluginul.
Puteți adăuga propriile cârlige de acțiune utilizând butonul do_action ()
funcție, pe care o voi demonstra în scurt timp. Orice funcții pe care le-ați cuplat la acea acțiune va rula apoi la acel punct al codului.
Cârligele de filtrare sau filtrele controlează modul în care se întâmplă ceva sau se schimbă ceva care deja se transmite. Ați putea folosi un filtru pentru a emite metadate într-un anumit format, pentru a înlocui ieșirea textului de către pluginul dvs. sau pentru a împiedica afișarea unui element.
Adăugați filtre în codul dvs. utilizând apply_filters ()
funcție, pe care o voi demonstra în scurt timp. După cum indică cuvântul "aplică", aplicați filtrele codului existent, în timp ce o acțiune pe care o creați utilizând do_action ()
este goală până când funcția de cârlig funcționează.
Să aruncăm o privire la câteva exemple care demonstrează modul în care utilizați fiecare funcție, acțiune și filtre. În primul rând, vom analiza utilizarea funcțiilor direct în codul dvs. fără a le atașa la un cârlig.
Iată un exemplu de funcție care se numește direct într-un fișier de șablon. În site-urile clientului meu adaug un colofon în subsolul paginii, care include informații despre drepturile de autor. Iată funcția:
dacă (! function_exists ('compass_colophon')) funcția compass_colophon () ?>"title =""rel =" acasă "> Realizat de WordPress și proiectat de Compass Design. Această funcție este conectabilă deoarece o folosesc într-o temă părinte; dacă apoi creez o nouă funcție cu același nume în tema copilului meu, aceasta va suprascrie această funcție. Rețineți că funcția include o altă funcție,
compass_colophon ()
, chemându-l direct în cod.Această funcție este în
functions.php
fișierul temei mele părinte. Pot să o spun direct înfooter.php
fișierul temei mele, așa cum este cazul:compass_colophon ();Aceasta afișează codul în funcție în punctul din tema mea unde îl numesc. De asemenea, puteți transmite parametri funcțiilor dvs., care sunt apoi utilizate în interiorul funcției.
După cum voi demonstra în scurt timp, această funcție ar putea fi de asemenea cuplată la o acțiune sau la un filtru.
Hooking funcții la acțiuni
Mai degrabă decât să apelez direct la funcția de colofon, voi avea mai multă flexibilitate dacă îl atașez la un cârlig.
Crearea cârligelor de acțiune
În loc să sunați
compass_colophon ()
în dosarul meu de subsol, pot adăuga un cârlig de acțiune la acel moment înfooter.php
fișier, adăugând aceasta:do_action ('compass_in_footer');
do_action ()
funcția are un parametru obligatoriu, care este numele acțiunii. De asemenea, puteți să adăugați opțional argumente pentru el.Hooking funcții la acțiuni
Deci acum, în loc să-mi sun funcția de colofon, trebuie să-l prind pe noul meu cârlig de acțiune. In al meu
functions.php
fișier, adaug acest lucru cu funcția mea:add_action ('compass_in_footer', 'compass_colophon');Acest lucru îmi creează funcția
compass_in_footer
acțiune, ceea ce înseamnă că codul din interiorul funcției mele va rula în punctul din codul unde a fost plasată acțiunea. Primul parametru este numele cârligului de acțiune, iar al doilea este numele funcției mele.Un avantaj de a face acest lucru este că puteți să cuplați mai multe funcții la aceeași acțiune și puteți seta prioritatea astfel încât acestea să tragă în ordinea în care doriți să le.
Deci, să spun că am o altă funcție pe care vreau să o fac cu mine
compass_in_footer
cârlig, numitcompass_smallprint ()
, care conține o imprimare mai mică:dacă function_exists (compass_smallprint ())) funcția compass_smallprint () // conținutul funcției aici add_action ('compass_in_footer', 'compass_smallprint', 20);Puteți vedea aici că mi-am adăugat un al treilea parametru
ADD_ACTION ()
funcție, care este prioritatea. Prioritatea implicită este10
, care va fi aplicat dacă lăsați acest lucru gol. Deci, pentru că nu am stabilit o prioritate pentru minecompass_colophon ()
funcție, setarea 20 pentrucompass_smallprint ()
funcția va face ca funcția să ruleze dupăcompass_colophon ()
funcţie.Dezactivați funcțiile din acțiuni
Uneori doriți să opriți funcționarea unei funcții și nu o puteți înlocui deoarece nu este conectabilă. Dacă funcția a fost cuplată la un cârlig de acțiune, atunci puteți face acest lucru folosind
remove_action ()
funcţie.Deci, dacă vreau să-mi împiedic
compass_smallprint ()
funcționează din funcționare, îl desfac de lacompass_in_footer
acțiune ca aceasta:remove_action ('compass_in_footer', 'compass_smallprint', 20);
remove_action ()
funcția are trei parametri: numele cârligului de acțiune, numele funcției și prioritatea cu care funcția a fost inițial atinsă de acțiune. Trebuie să includeți prioritatea pentru ca aceasta să funcționeze.De asemenea, puteți dezactiva toate funcțiile dintr-o acțiune, dacă doriți să le împiedicați pe toți să execute. Aveți grijă atunci când faceți acest lucru, deoarece pot exista funcții pe care nu le cunoașteți pentru a vă acționa.
Pentru a face acest lucru, utilizați
remove_all_actions ()
funcţie:remove_all_actions ('compass_in_footer');Adăugarea unui număr de prioritate ca al doilea parametru elimină numai funcțiile legate de cârligul respectiv cu prioritatea pe care ați specificat-o, ceea ce vă oferă mai mult control.
Funcțiile de hooking pentru filtre
Aveți, de asemenea, opțiunea de a vă conecta funcțiile pentru a filtra cârligele. Faceți acest lucru când doriți să modificați sau să înlocuiți unele coduri existente. Când creați cârligul de filtrare (folosind
apply_filters ()
), înfășurați codul în jurul temei sau pluginului, care este apoi modificat de orice filtre atașate la cârlig.Acest lucru poate fi util dacă aveți opțiuni tematice sau plugin pe care doriți să le înlocuiți o setare prestabilită sau dacă creați o temă părinte care ar putea avea elemente suprascrise de o temă copil.
Crearea cârligelor de filtrare
apply_filters ()
funcția are trei parametri: numele cârligului de filtrare, valoarea pe care doriți să o filtrați (adică valoarea implicită) și variabilele opționale pe care le treceți apoi la funcțiile legate de filtru.Puteți adăuga un filtru în fișierele șablonului tematic sau într-o funcție care este cuplată prin intermediul unui cârlig de acțiune. Să aruncăm o privire la ambele opțiuni.
Revenind la mine
compass_colophon ()
funcția, eu convertesc acest lucru la un filtru prin adăugarea conținutului său la minefooter.php
fișier în interiorulapply_filters ()
funcționează ca atare:echo apply_filters ('compass_colophon', '"title =""rel =" acasă "> Realizat de WordPress și proiectat de Compass Design. ');Acest lucru emite codul pe care l-am setat ca al doilea parametru al meu
apply_filters ()
funcţie.Cu toate acestea, prefer să nu adăugați acest lucru direct la fișierul temei tematice, așa că voi adăuga filtrul la funcția pe care o atașez deja printr-un cârlig de acțiune.
Așa că am adăugat
compass_in_footer
acțiune pentru minefooter.php
fișier folosinddo_action ()
așa cum am demonstrat mai sus, și apoi creez o funcție în minefunctions.php
fișier care este conectat la acea acțiune și conține un filtru:dacă function_exists ('compass_colophon')) funcția compass_colophon () echo apply_filters ('compass_colophon_filter', '"title =""rel =" acasă "> Realizat de WordPress și proiectat de Compass Design. '); add_action ("compass_in_footer", "compass_colophon");Aceasta înseamnă că acum pot înlocui conținutul implicit într-unul din cele trei moduri:
compass_colophon ()
în tema mea copil, care suprascrie funcția din tema mea părinte ca fiind conectabilăcompass_colophon ()
funcția de la compass_in_footer
cârligul de acțiune și scrierea unei noi funcții pe care o am în locul eicompass_colophon_filter
filtru cârlig, care suprascrie valoarea în meu apply_filters ()
funcţieÎn viața reală nu ar trebui să aveți mai multe opțiuni, deci este mai probabil să aplicați filtre la o parte din conținut în funcția dvs., mai degrabă decât la tot.
Așadar, am putut crea două filtre, unul pentru secțiunea de drepturi de autor și altul pentru credite:
dacă (! function_exists ('compass_colophon')) funcția compass_colophon () echo '„; echo apply_filters ('compass_copyright_filter', ' "title =""rel =" acasă "> '); echo apply_filters ('compass_copyright_filter', ' Realizat de WordPress și proiectat de Compass Design. '); echo " „; add_action ("compass_in_footer", "compass_colophon");
Apoi aș putea trece peste toată funcția mea compass_colophon dezlegându-l sau scriind unul nou în tema copilului meu, sau aș putea să creez o funcție dependentă de compass_copyright_filter
sau compass_credits_filter
cârlig filtru, pentru a suprascrie fiecare element în parte.
Pentru a fixa o funcție pe un cârlig de filtrare, utilizați add_filter ()
care are doi parametri: numele cârligului și numele funcției.
Deci, pentru a schimba creditele, aș scrie această funcție:
funcția new_credits () ?> Realizat de WordPress și proiectat de Rachel McCollin.Acest lucru suprascrie valoarea stabilită în originalul meu
compass_credits_filter
filtru cârlig cu conținutul meunew_credits ()
funcția, dar păstrează totul încompass_colophon ()
funcționează la fel.De asemenea, puteți specifica priorități atunci când funcțiile de blocare a filtrelor sunt exact aceleași ca și cu cârligele de acțiune. Vor fi executate mai întâi funcții cu o prioritate mai mică.
Descărcarea funcțiilor din filtre
Ca și cârligele de acțiune, puteți, de asemenea, să eliminați funcțiile din cârligele de filtrare. Faceți acest lucru folosind funcția remove_filter (), care are trei parametri: numele cârligului de filtrare, numele funcției și prioritatea, care este obligatorie dacă o prioritate a fost setată când funcția a fost inițial atinsă de filtru.
Deci, pentru a-mi elimina
new_credits ()
functie, folosesc aceasta:remove_filter ('compass_credits_filter', 'new_credits');Ieșirea codului va reveni apoi la valoarea pe care am specificat-o în originalul meu
apply_filters ()
funcţie. Deci, dacă aș vrea să-l eliminnew_credits ()
și nu trebuie să apară nimic în locul ei, trebuie să adaug o nouă funcție. Apoi am desprins prima funcție și mi-am atins funcția nouă cum ar fi:funcția no_credits () return; remove_filter ('compass_credits_filter', 'new_credits'); add_filter ('compass_credits_filter', 'no_credits');rezumat
Înțelegerea diferenței dintre acțiunea și cârligele de filtrare și posibilitatea de a le utiliza în mod eficient pe amândouă, va da un plus impuls dezvoltării temei și pluginului. De fapt, fără a utiliza cârlige de cel puțin un tip, nu puteți scrie plugin-uri deloc, deoarece singurul mod în care codul din plugin-urile dvs. este activat este prin acționarea și cârligele de filtrare la care este atașat.
Acest ghid vă arată modul de adăugare a aceleiași funcționalități utilizând o funcție, un cârlig de acțiune și unul sau mai multe cârlige de filtrare, împreună cu tehnici de eliminare a funcțiilor de la cârlige și sfaturi privind fiecare tehnică mai utilă.
Pe lângă funcțiile de conectare la acțiunea proprie și cârligele de filtrare pe care le creați, le puteți conecta la acțiunile și filtrele oferite de WordPress, cum ar fi
wp_head
sau acțiuneabody_class
filtru.