Hi @Sruly :
Sie haben so ziemlich Ihre eigene Frage beantwortet, aber ich werde etwas näher darauf eingehen.
Aktionshaken
Aktionen Hooks sind für den Fall gedacht, dass WordPress Core oder ein Plugin oder Theme Ihnen die Möglichkeit gibt, Ihren Code an einer bestimmten Stelle einzufügen und eine oder mehrere der folgenden Aktionen auszuführen:
- Verwenden Sie
echo
diese Option , um HTML- Inhalt oder anderen Inhalt in den Antwortpuffer einzufügen.
- Ändern Sie den globalen Variablenstatus für eine oder mehrere Variablen und / oder
- Ändern Sie die Parameter an Ihre Hook - Funktion übergeben (der Haken unter der Annahme wurde durch genannt
do_action_ref_array()
statt , do_action()
da diese nicht unterstützt Variablen vorbei durch Verweis .)
Filterhaken
Filter-Hooks verhalten sich sehr ähnlich wie Aktions-Hooks , sollen jedoch einen Wert empfangen und möglicherweise eine geänderte Version des Werts zurückgeben. Ein Filter-Hook kann auch genau wie ein Action-Hook verwendet werden, um z. B. eine globale Variable zu ändern oder HTML-Code zu generieren, vorausgesetzt, Sie müssen dies tun, wenn der Hook aufgerufen wird. Bei Filter-Hooks ist es sehr wichtig, dass die Person, die einen Filter-Hook verwendet (eine geänderte Version), den ersten Parameter zurückgibt, über den er übergeben wurde. Ein häufiger Anfängerfehler ist, zu vergessen, diesen Wert zurückzugeben!
Verwenden zusätzlicher Parameter zum Bereitstellen von Kontext in Filter-Hooks
Abgesehen davon hatte ich das Gefühl, dass Filter Hooks in früheren Versionen von WordPress gehumpelt wurden, weil sie nur einen Parameter erhielten. dh sie würden einen Wert zum Modifizieren erhalten, aber keinen zweiten oder dritten Parameter, um irgendeinen Kontext bereitzustellen. In letzter Zeit hat das WordPress-Kernteam jedoch freudig (für mich) zusätzliche Parameter zu Filter Hooks hinzugefügt, damit Sie mehr Kontext entdecken können. Ein gutes Beispiel ist der posts_where
Haken; Ich glaube, vor ein paar Versionen hat es nur einen Parameter akzeptiert, der die SQL-Klasse "where" der aktuellen Abfrage ist, aber jetzt akzeptiert es sowohl die where-Klausel als auch einen Verweis auf die aktuelle Instanz der WP_Query
Klasse, die den Hook aufruft.
Also, was ist der wahre Unterschied?
In Wirklichkeit sind Filter Hooks so ziemlich eine Obermenge von Action Hooks. Ersteres kann alles, was Letzteres kann, und ein bisschen mehr, obwohl der Entwickler nicht dafür verantwortlich ist, einen Wert mit dem Aktions-Hook zurückzugeben, den er oder sie mit dem Filter-Hook tut.
Anleitung und Telegraphenabsicht
Aber das ist wahrscheinlich nicht wichtig. Ich denke, was wichtig ist, ist, dass ein Entwickler, der sich für die Verwendung eines Aktions-Hooks im Vergleich zu einem Filter-Hook oder umgekehrt entscheidet, seine Absicht telegraphiert und damit dem Entwickler des Themes oder Plugins, der den Hook möglicherweise verwendet , eine Anleitung gibt . Im Wesentlichen sagen sie entweder "Ich rufe Sie an, tue, was auch immer Sie tun müssen" ODER "Ich werde Ihnen diesen Wert zur Änderung übergeben, aber stellen Sie sicher, dass Sie ihn zurückgeben ."
Letztendlich denke ich, dass die Orientierung bei der Auswahl des Hakentyps der wahre Wert hinter der Unterscheidung ist . IMO jedenfalls.
Hoffe das hilft!
Wenn Sie sich die Quelle für die
add_action()
Kernfunktion ansehen , handelt es sich nur um einen Wrapper für dieadd_filter()
Funktion ...Und wenn Sie sich die
do_action()
Kernfunktion ansehen , ist sie der Kernfunktion sehr ähnlichapply_filters()
, mit einem entscheidenden Unterschied: Sie gibt keinen Wert zurück.Also, was bedeutet das? Aktionen ähneln Filtern, mit der Ausnahme, dass eine Aktion keinen Wert zurückgibt und Sie daher keine Daten ändern können. Es zeigt, dass es einfach war, den Aktionsmechanismus von WordPress zu erstellen, indem einfach der Filtermechanismus kopiert und kein Wert zurückgegeben wurde. Grundsätzlich können Sie mit einer Aktion nur eine Funktion ausführen, ohne einen Wert zu ändern.
quelle
In einfachen Worten.
Aktualisiert: Wir können jedes Plugin erweitern, das die Aktionen und Filter verwendet, ohne den dortigen Code zu ändern. Durch Hinzufügen von Filtern und Aktionen in unserem eigenen Theme oder Plugin.
Wie benutzt man?
Aktion:
Überprüfen Sie die folgenden einfachen Beispiele in Ihrer
functions.php
Designdatei.Über dem Programm drucken Sie die Ausgabe:
[HINWEIS: test () ruft hier einfach die Funktion auf. Und führen Sie die Rückruffunktion 'test' aus.]
Über dem Programm drucken Sie die Ausgabe:
[HINWEIS: Hier
do_action('test')
funktioniert wie das Aufrufen von Funktion. Und führen Sie die Rückruffunktion 'test1' aus.]Über dem Programm drucken Sie die Ausgabe:
[HINWEIS: Hier
do_action('test')
funktioniert wie das Aufrufen von Funktion. Und Callback-Funktionen auf seine Prioritäten ausführen.Rückruffunktion 'test1' hat Priorität 2 und 'test2' hat Priorität 1.]
Wenn sich die Prioritäten wie 'test1' mit Priorität 1 und 'test2' mit Priorität 2 ändern, wird Folgendes ausgegeben:
functions.php
Über dem Programm drucken Sie die Ausgabe:
Erstellen Sie nun ein Beispiel-Plugin, um zu überprüfen, wie es für Entwickler von Drittanbietern funktioniert.
/wp-content/plugins/
Verzeichnis.Aktivieren Sie jetzt unser einfaches Plugin im WordPress-Admin-Dashboard.
Gehe zum Menü Plugin und aktiviere es.
Nach dem Aktivieren des Plugins über dem Programm wird die Ausgabe gedruckt:
[HINWEIS: Wenn wir die Priorität für unsere Plugin-Aktion von 1 bis 9 hinzufügen, wird die Ausgabe wie folgt gedruckt:
Weil WordPress die
10 priority by default
für alle hinzugefügten Aktionen berücksichtigt .]Filter
Überprüfen Sie die folgenden Beispiele:
Einfaches PHP-Beispiel:
Über dem Programm drucken Sie die Ausgabe:
Über dem Programm drucken Sie die Ausgabe:
Hier haben wir Filter hinzugefügt
my_filter_name
und die vorhandene Ausgabearray( 'one', 'two' )
mit geändert,array( 'three', 'four' )
ohne die Theme / Plugin-Dateien zu ändern.quelle