WordPress Acties en Filters Wat is het verschil?

Actie- en filterhaken vormen een fundamenteel onderdeel van de verschillende WordPress-API's. Zonder hen bent u beperkt in wat u kunt doen in uw thema's en (vooral) uw plug-ins.

Maar soms kan het gemakkelijk zijn om de twee te verwarren, vooral in de gevallen waarin WordPress zowel een actiehaak als een filterhaak met dezelfde naam heeft.

In dit artikel definieer ik actie en filterhaken en beschrijf ik het verschil ertussen, en ik laat zien hoe je ze kunt gebruiken in je thema's en plug-ins. Ik zal ook enkele voorbeelden geven van wanneer je ze elk zou kunnen gebruiken.

Wanneer u actie en filterhaken toevoegt aan uw code (of u koppelt functies aan hen aan), helpt het om te begrijpen hoe acties en filters door WordPress worden aangeroepen en wat er in die volgorde gebeurt. Ik zal dat hier niet in detail bespreken omdat we een andere zelfstudie hebben die dat werk doet.

Definities en verschillen

Laten we beginnen met enkele definities. Ik zal ook actie- en filterhaken en -functies definiëren, zodat je het verschil tussen beide kunt zien.

functies

Functies zijn het eerste waar de meeste mensen mee werken wanneer ze WordPress-ontwikkeling leren; als je code hebt toegevoegd aan je thema's functions.php bestand, dan heb je een functie geschreven.

Functies geven aan hoe iets zal gebeuren. U codeert een functie om gegevens op te vragen, inhoud weer te geven of veel andere taken uit te voeren. U kunt functies rechtstreeks in de sjabloondocumenten van uw thema aanroepen (uitvoeren), of u kunt ze aan acties koppelen of haken filteren. Functies kunnen ook sjabloontags bevatten, zoals voorwaardelijke tags, om aan te geven wanneer de functie moet worden toegepast.

Ik zal je de verschillende manieren tonen om functies later in dit artikel uit te voeren.

Actiehaken

Actiehaken (of acties) worden geactiveerd wanneer iets plaatsvindt, zoals het laden van een pagina, een gebruiker die zich aanmeldt of een aangepaste actie die u definieert in uw thema of plug-in.

U kunt uw eigen actiehaken toevoegen met behulp van de do_action () functie, die ik binnenkort zal laten zien. Alle functies die u aan die actie koppelt, worden vervolgens op dat punt in de code uitgevoerd.

Filterhaken

Filterhaken of filters regelen hoe iets gebeurt of veranderen iets dat al wordt uitgevoerd. U zou een filter kunnen gebruiken om metadata in een specifiek formaat uit te voeren, om tekstuitvoer door uw plug-in te negeren, of om te voorkomen dat er iets wordt weergegeven.

U voegt filters toe in uw code met behulp van de apply_filters () functie, die ik binnenkort zal laten zien. Omdat het woord 'toepassen' aangeeft, past u filters toe op bestaande code, terwijl een actie die u maakt gebruikt do_action () is leeg totdat u functies eraan koppelt.

Functies, acties en filters gebruiken

Laten we enkele voorbeelden bekijken die aantonen hoe u elk van de functies, acties en filters gebruikt. Allereerst bekijken we functies rechtstreeks in uw code gebruiken zonder deze aan een haak te koppelen.

Directe belfuncties

Hier is een voorbeeld van een functie die rechtstreeks in een sjabloonbestand wordt aangeroepen. In mijn cliëntsites voeg ik een colofon toe in de voettekst, inclusief copyrightinformatie. Dit is de functie:

if (! function_exists ('compass_colophon')) function compass_colophon () ?> 
"title =""rel =" home "> Mogelijk gemaakt door WordPress en ontworpen door Compass Design.

Deze functie kan worden geplugd terwijl ik deze in een bovenliggend thema gebruik; als ik vervolgens een nieuwe functie met dezelfde naam in mijn kindthema maak, overschrijft deze deze functie. Merk op dat de functie een andere functie bevat, compass_colophon (), het rechtstreeks in de code aanroepen.

Deze functie bevindt zich in de functions.php bestand van mijn ouderthema. Ik kan het rechtstreeks in de footer.php bestand van mijn thema, zoals zo:

compass_colophon ();

Dit geeft de code in de functie uit op het punt in mijn thema, waar ik het noem. U kunt ook parameters doorgeven aan uw functies, die vervolgens in de functie worden gebruikt.

Zoals ik binnenkort zal aantonen, kan deze functie ook worden gekoppeld aan een actie of een filter.

Functies koppelen aan acties

In plaats van dat ik de functie voor colofon rechtstreeks noem, heb ik meer flexibiliteit als ik hem aan een haak bevestig.

Actieknoppen maken

In plaats van de compass_colophon () functie in mijn voettekstbestand, kan ik een actiehaak toevoegen op dat punt in de footer.php bestand, door dit toe te voegen:

do_action ('compass_in_footer');

De do_action () functie heeft één verplichte parameter, de naam van de actie. Je kunt er optioneel ook argumenten aan toevoegen.

Functies koppelen aan acties

Dus nu in plaats van mijn colofon-functie te bellen, moet ik hem aan mijn nieuwe actieknop haken. In mijn functions.php bestand, ik voeg dit toe met mijn functie:

add_action ('compass_in_footer', 'compass_colophon');

Dit haakt mijn functie aan de compass_in_footer actie, wat betekent dat de code in mijn functie wordt uitgevoerd op het punt in de code waar de actie is geplaatst. De eerste parameter is de naam van de actiehaak en de tweede is de naam van mijn functie.

Een voordeel van het op deze manier doen, is dat je meer dan één functie aan dezelfde actie kunt haken, en je kunt de prioriteit zo instellen dat ze schieten in de volgorde waarin je wilt dat ze.

Laten we zeggen dat ik een andere functie heb die ik aan mijn wil koppelen compass_in_footer haak, genaamd compass_smallprint (), welke wat meer kleine lettertjes bevat:

if (! function_exists (compass_smallprint ())) function compass_smallprint () // inhoud van functie hier add_action ('compass_in_footer', 'compass_smallprint', 20);

Je ziet hier dat ik een derde parameter aan mijn heb toegevoegd add_action () functie, wat de prioriteit is. De standaardprioriteit is 10, die wordt toegepast als u dit veld leeg laat. Dus omdat ik geen prioriteit heb gesteld voor mijn compass_colophon () functie, instelling 20 voor de compass_smallprint () functie zorgt ervoor dat die functie wordt uitgevoerd na de compass_colophon () functie.

Functies losmaken van acties

Soms wilt u voorkomen dat een functie wordt uitgevoerd en kunt u deze niet overschrijven omdat deze niet plug-in is. Als de functie is gekoppeld aan een actiehaak, kunt u dit doen met behulp van de remove_action () functie.

Dus als ik mijn wil voorkomen compass_smallprint () functie van hardlopen, maak ik het los van de compass_in_footer actie zoals:

remove_action ('compass_in_footer', 'compass_smallprint', 20);

De remove_action () functie heeft drie parameters: de naam van de actiehaak, de naam van de functie en de prioriteit waarmee de functie oorspronkelijk aan de actie was gekoppeld. U moet de prioriteit opnemen om dit te laten werken.

U kunt ook alle functies loskoppelen van een actie als u wilt voorkomen dat ze allemaal worden uitgevoerd. Wees voorzichtig wanneer je dit doet, omdat er functies zijn waarvan je je niet bewust bent dat ze verslaafd zijn aan je actie.

Gebruik hiervoor de remove_all_actions () functie:

remove_all_actions ('compass_in_footer');

Als u een prioriteitsnummer toevoegt als de tweede parameter, worden alleen de functies die aan die actiehaak zijn gekoppeld, verwijderd met de prioriteit die u hebt opgegeven, waardoor u meer controle krijgt.

Koppelingsfuncties aan filters

U hebt ook de mogelijkheid om uw functies aan filterhaken te koppelen. Dit doet u wanneer u een bestaande code wilt wijzigen of vervangen. Wanneer u de filterhaak maakt (met behulp van de apply_filters () functie), verpak je die rond de code in je thema of plugin, die vervolgens wordt gewijzigd door eventuele filters die aan de haak zijn bevestigd.

Dit kan handig zijn als u over thema- of plug-inopties beschikt die u een standaardinstelling wilt negeren, of als u een bovenliggend thema maakt dat mogelijk elementen heeft die worden onderdrukt door een kindthema.

Filterhaken maken

De apply_filters () functie heeft drie parameters: de naam van de filterhaak, de waarde die u wilt filteren (dat wil zeggen de standaardwaarde) en optionele variabelen die u vervolgens doorgeeft aan de functies die aan het filter zijn gekoppeld.

U kunt een filter toevoegen aan uw themasjabloonbestanden of aan een functie die is gekoppeld via een actiehaak. Laten we beide opties eens bekijken.

Terugkeren naar mijn compass_colophon () functie, ik converteer dit naar een filter door de inhoud ervan toe te voegen aan mijn footer.php bestand in de apply_filters () functioneer als volgt:

echo apply_filters ('compass_colophon', ' 
"title =""rel =" home "> Mogelijk gemaakt door WordPress en ontworpen door Compass Design.
');

Dit voert de code uit die ik heb ingesteld als de tweede parameter van mijn apply_filters () functie.

Ik geef er echter de voorkeur aan dit niet rechtstreeks aan mijn themasjabloonbestand toe te voegen, dus ik zal het filter toevoegen aan de functie die ik al via een actiehaak aan het koppelen ben..

Dus ik voeg het toe compass_in_footer actie voor mijn footer.php bestand met behulp van de do_action () functie zoals hierboven aangetoond, en dan maak ik een functie in mijn functions.php bestand dat is gekoppeld aan die actie en een filter bevat:

if (! function_exists ('compass_colophon')) function compass_colophon () echo apply_filters ('compass_colophon_filter', ' 
"title =""rel =" home "> Mogelijk gemaakt door WordPress en ontworpen door Compass Design.
'); add_action ('compass_in_footer', 'compass_colophon');

Dit betekent dat ik de standaardinhoud nu op drie manieren kan negeren:

  • door een nieuwe functie te maken genaamd compass_colophon () in mijn kind-thema, dat de functie in mijn bovenliggende thema opheft als plug-in
  • door het onthaken los te maken compass_colophon () functie van de compass_in_footer actie haak en een nieuwe functie schrijven die ik er op zijn plaats aan bevestig
  • door een nieuwe functie aan te maken die ik vervolgens aan de haak compass_colophon_filter filterhaak, die de waarde in mijn overschrijft apply_filters () functie

In het echte leven hoef je niet zoveel opties te hebben, dus het is waarschijnlijker dat je filters zou toepassen op een deel van de inhoud in je functie in plaats van het hele ding.

Dus ik zou twee filters kunnen maken, een voor de auteursrechtsectie en een andere voor de aftiteling:

if (! function_exists ('compass_colophon')) function compass_colophon () echo '
'; echo apply_filters ('compass_copyright_filter', ' "title =""rel =" home "> '); echo apply_filters ('compass_copyright_filter', ' Mogelijk gemaakt door WordPress en ontworpen door Compass Design. '); echo '
'; add_action ('compass_in_footer', 'compass_colophon');

Dan zou ik ofwel de hele compass_colophon-functie kunnen negeren door hem los te haken of een nieuwe te schrijven in mijn kindthema, of ik zou een functie kunnen maken die verslaafd is aan de compass_copyright_filter of compass_credits_filter filterhaak, om elk element afzonderlijk op te heffen.

Koppelingsfuncties aan filters

Om een ​​functie aan een filterhaak te haken, gebruikt u de add_filter () functie, die twee parameters heeft: de naam van de haak en de naam van de functie.

Dus om de credits te veranderen, zou ik deze functie schrijven:

function new_credits () ?>  Mogelijk gemaakt door WordPress en ontworpen door Rachel McCollin.   

Dit overschrijft de waarde die is ingesteld in mijn origineel compass_credits_filter filterhaak met de inhoud van mijn new_credits () functie, maar houdt alles in de compass_colophon () functioneer hetzelfde.

U kunt ook prioriteiten specificeren wanneer functies aan filters worden gekoppeld, op precies dezelfde manier als bij actiehaken. Functies met een lagere prioriteit worden eerst uitgevoerd.

Functies loskoppelen van filters

Net als bij actiehaken kunt u ook functies uit filterhaken verwijderen. U doet dit met behulp van de functie remove_filter (), die drie parameters heeft: de naam van de filterhaak, de naam van de functie en de prioriteit, die verplicht is als een prioriteit werd ingesteld toen de functie oorspronkelijk aan het filter was gekoppeld.

Dus om mijn te verwijderen new_credits () functie, ik gebruik dit:

remove_filter ('compass_credits_filter', 'new_credits');

De code-uitvoer zou dan terugkeren naar de waarde die ik in mijn origineel heb gespecificeerd apply_filters () functie. Dus als ik het wilde verwijderen new_credits () functioneren en niets op zijn plaats verschijnt, zou ik een nieuwe functie moeten toevoegen. Ik haak dan de eerste functie los en haak mijn nieuwe functie als volgt vast:

function no_credits () terug;  remove_filter ('compass_credits_filter', 'new_credits'); add_filter ('compass_credits_filter', 'no_credits');

Samenvatting

Als u het verschil tussen actie en filterhaken begrijpt en beide effectief kunt gebruiken, krijgt uw thema- en pluginontwikkeling een boost. In feite, zonder haken van ten minste één type te gebruiken, kun je helemaal geen plug-ins schrijven, omdat de enige manier waarop de code in je plug-ins wordt geactiveerd, is via de actie en filterhaken waaraan het is gekoppeld.

Deze gids liet zien hoe je dezelfde functionaliteit kunt toevoegen met behulp van een functie, een actiehaak en een of meer filterhaken, samen met technieken om functies uit haken te verwijderen en advies over wanneer elke techniek nuttiger is.

Naast het inhaken van functies op uw eigen actie en filterhaken die u maakt, kunt u ze koppelen aan de acties en filters van WordPress, zoals de wp_head actie of de body_class filter.