WordPress-Aktionen und Filter Was ist der Unterschied?

Aktions- und Filterhaken sind ein grundlegender Bestandteil der verschiedenen WordPress-APIs. Ohne sie sind Sie in Bezug auf das, was Sie in Ihren Designs und (besonders) in Ihren Plugins tun können, eingeschränkt.

Aber manchmal kann es leicht sein, die beiden zu verwechseln, vor allem wenn WordPress sowohl einen Action-Hook als auch einen Filter-Hook mit demselben Namen hat.

In diesem Artikel werde ich Aktions- und Filterhaken definieren und den Unterschied zwischen ihnen beschreiben. Außerdem werde ich zeigen, wie sie in Ihren Designs und Plugins verwendet werden. Ich werde auch einige Beispiele nennen, wann Sie jedes verwenden könnten.

Wenn Sie Ihrem Code Aktions- und Filter-Hooks hinzufügen (oder Funktionen mit ihnen verknüpfen), hilft es zu verstehen, wie Aktionen und Filter von WordPress aufgerufen werden und was in welcher Reihenfolge geschieht. Ich werde das hier nicht ausführlich behandeln, da wir ein anderes Tutorial haben, das diese Arbeit erledigt.

Definitionen und Unterschiede

Beginnen wir mit einigen Definitionen. Ich definiere auch Aktions- und Filter-Hooks und Funktionen, damit Sie den Unterschied zwischen allen sehen können.

Funktionen

Die meisten Leute arbeiten mit Funktionen, wenn sie WordPress-Entwicklung lernen. wenn Sie Ihrem Thema Code hinzugefügt haben Functions.php Datei, dann haben Sie eine Funktion geschrieben.

Funktionen legen fest, wie etwas passieren wird. Sie programmieren eine Funktion, um Daten abzufragen, Inhalte auszugeben oder viele andere Aufgaben auszuführen. Sie können Funktionen direkt in den Vorlagendateien Ihres Themas aufrufen (ausführen) oder sie an Aktions- oder Filterhaken anhängen. Funktionen können auch Vorlagen-Tags wie bedingte Tags enthalten, um festzulegen, wann die Funktion angewendet werden soll.

Ich werde Ihnen die verschiedenen Möglichkeiten zeigen, wie Sie Funktionen später ausführen können.

Aktionshaken

Aktions-Hooks (oder Aktionen) werden ausgelöst, wenn etwas passiert, z. B. das Laden einer Seite, der Benutzer, der sich anmeldet, oder eine benutzerdefinierte Aktion, die Sie in Ihrem Design oder Plugin definieren.

Sie können Ihre eigenen Action-Hooks mit dem hinzufügen do_action () Funktion, die ich in Kürze demonstrieren werde. Alle Funktionen, die Sie mit dieser Aktion verknüpfen, werden dann an dieser Stelle im Code ausgeführt.

Filterhaken

Filter-Hooks oder Filter steuern, wie etwas passiert, oder ändern etwas, das bereits ausgegeben wird. Sie können einen Filter verwenden, um Metadaten in einem bestimmten Format auszugeben, die Textausgabe Ihres Plugins zu überschreiben oder zu verhindern, dass überhaupt etwas angezeigt wird.

Sie fügen in Ihrem Code Filter hinzu, indem Sie die apply_filters () Funktion, die ich in Kürze demonstrieren werde. Wie das Wort "zutreffend" anzeigt, wenden Sie Filter auf vorhandenen Code an, während Sie eine Aktion erstellen, die Sie verwenden do_action () ist leer, bis Sie Funktionen damit verbinden.

Funktionen, Aktionen und Filter verwenden

Schauen wir uns einige Beispiele an, die zeigen, wie Sie die einzelnen Funktionen, Aktionen und Filter verwenden. Zunächst betrachten wir die Verwendung von Funktionen direkt in Ihrem Code, ohne sie an einen Haken anzuhängen.

Funktionen direkt aufrufen

Hier ist ein Beispiel für eine Funktion, die direkt in einer Vorlagendatei aufgerufen wird. In meinen Client-Sites füge ich ein Kolophon in der Fußzeile hinzu, das Copyright-Informationen enthält. Hier ist die Funktion:

if (! function_exists ('compass_colophon')) Funktion compass_colophon () ?> 
"title =""rel =" home "> Unterstützt von WordPress und entworfen von Compass Design.

Diese Funktion ist steckbar, da ich sie in einem übergeordneten Thema verwende. Wenn ich dann eine neue Funktion mit demselben Namen in meinem untergeordneten Thema erstellen, wird diese Funktion überschrieben. Beachten Sie, dass die Funktion eine andere Funktion enthält, compass_colophon (), direkt im Code aufrufen.

Diese Funktion befindet sich im Functions.php Datei meines übergeordneten Themas. Ich kann es direkt anrufen footer.php Datei meines Themas wie folgt:

compass_colophon ();

Dies gibt den Code in der Funktion an der Stelle in meinem Thema aus, an der ich ihn anrufe. Sie können auch Parameter an Ihre Funktionen übergeben, die dann innerhalb der Funktion verwendet werden.

Wie ich in Kürze zeigen werde, könnte diese Funktion auch mit einer Aktion oder einem Filter verknüpft werden.

Funktionen mit Aktionen verknüpfen

Anstatt diese Kolophonfunktion direkt aufzurufen, habe ich mehr Flexibilität, wenn ich sie an einem Haken befestige.

Aktionshaken erstellen

Anstatt die compass_colophon () Funktion in meiner Fußzeilendatei kann ich an dieser Stelle im Aktionsbereich einen Aktionshaken hinzufügen footer.php Datei, indem Sie Folgendes hinzufügen:

do_action ('compass_in_footer');

Das do_action () Funktion hat einen obligatorischen Parameter, nämlich den Namen der Aktion. Sie können optional auch Argumente hinzufügen.

Funktionen mit Aktionen verknüpfen

Anstatt also meine Kolophonfunktion aufzurufen, muss ich sie an meinen neuen Aktionshaken anschließen. In meinem Functions.php Datei, füge ich mit meiner Funktion hinzu:

add_action ('compass_in_footer', 'compass_colophon');

Dies hakt meine Funktion an compass_in_footer action, was bedeutet, dass der Code in meiner Funktion an der Stelle des Codes ausgeführt wird, an der die Aktion platziert wurde. Der erste Parameter ist der Name des Action-Hooks und der zweite ist der Name meiner Funktion.

Ein Vorteil dieser Vorgehensweise ist, dass Sie mehr als eine Funktion mit derselben Aktion verknüpfen können, und Sie können die Priorität so festlegen, dass sie in der gewünschten Reihenfolge ausgelöst werden.

Nehmen wir also an, ich habe eine andere Funktion, an die ich mich anschließen möchte compass_in_footer Haken, gerufen compass_smallprint (), welches etwas mehr Kleingedrucktes enthält:

if (! function_exists (compass_smallprint ())) Funktion compass_smallprint () // Inhalt der Funktion hier add_action ('compass_in_footer', 'compass_smallprint', 20);

Sie sehen hier, dass ich einen dritten Parameter hinzugefügt habe add_action () Funktion, die Priorität hat. Die Standardpriorität ist 10, Die wird angewendet, wenn Sie dieses Feld leer lassen. Also, weil ich keine Priorität für meine gesetzt habe compass_colophon () Funktion, Einstellung 20 für die compass_smallprint () Funktion wird diese Funktion ausführen nach dem das compass_colophon () Funktion.

Aushängen von Funktionen von Aktionen

Manchmal möchten Sie, dass eine Funktion nicht ausgeführt wird, und Sie können sie nicht überschreiben, da sie nicht steckbar ist. Wenn die Funktion an einen Aktions-Hook angehängt wurde, können Sie dies mit der remove_action () Funktion.

Also wenn ich mein verhindern will compass_smallprint () Funktion aus dem Laufen, hänge ich aus dem compass_in_footer Aktion wie folgt:

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

Das remove_action () function hat drei Parameter: den Namen des Action-Hooks, den Namen der Funktion und die Priorität, mit der die Funktion ursprünglich mit der Aktion verbunden war. Sie müssen die Priorität angeben, damit dies funktioniert.

Sie können auch alle Funktionen einer Aktion aushaken, wenn Sie verhindern möchten, dass alle Funktionen ausgeführt werden. Seien Sie dabei vorsichtig, da es möglicherweise Funktionen gibt, von denen Sie nichts wissen.

Verwenden Sie dazu die remove_all_actions () Funktion:

remove_all_actions ('compass_in_footer');

Durch das Hinzufügen einer Prioritätsnummer als zweiten Parameter werden nur die Funktionen entfernt, die mit der angegebenen Priorität an diesen Aktions-Hook angehängt sind. Dadurch haben Sie mehr Kontrolle.

Funktionen an Filter anhängen

Sie haben auch die Möglichkeit, Ihre Funktionen zum Filtern von Haken zu aktivieren. Sie tun dies, wenn Sie vorhandenen Code ändern oder überschreiben möchten. Wenn Sie den Filterhaken erstellen (mit der apply_filters () Funktion), wickeln Sie den Code in Ihr Theme oder Plugin ein, der dann von allen an den Hook angehängten Filtern geändert wird.

Dies kann nützlich sein, wenn Sie über Design- oder Plugin-Optionen verfügen, die Sie über eine Standardeinstellung setzen möchten, oder wenn Sie ein übergeordnetes Design erstellen, bei dem Elemente möglicherweise durch ein untergeordnetes Design überschrieben werden.

Filterhaken erstellen

Das apply_filters () function hat drei Parameter: den Namen des Filter-Hooks, den Wert, den Sie filtern möchten (d. h. den Standardwert) und optionale Variablen, die Sie dann an die mit dem Filter verbundenen Funktionen übergeben.

Sie können einen Filter in Ihre Designvorlagendateien oder in eine Funktion einfügen, die über einen Aktionshaken angehängt wird. Lassen Sie uns beide Optionen betrachten.

Rückkehr zu meinem compass_colophon () Funktion, konvertiere ich dies in einen Filter, indem ich seinen Inhalt zu meiner footer.php Datei in der apply_filters () funktionieren so:

echo apply_filters ('compass_colophon', ' 
"title =""rel =" home "> Unterstützt von WordPress und entworfen von Compass Design.
');

Dies gibt den Code aus, den ich als zweiten Parameter von mir eingestellt habe apply_filters () Funktion.

Ich ziehe es jedoch vor, dies nicht direkt zu meiner Theme-Vorlagendatei hinzuzufügen, also füge ich den Filter der Funktion hinzu, die ich bereits über einen Action-Hook anhebe.

Also füge ich das hinzu compass_in_footer Aktion für meine footer.php Datei mit der do_action () Funktion wie oben gezeigt, und dann erstelle ich eine Funktion in meinem Functions.php Datei, die an diese Aktion angehängt ist und einen Filter enthält:

if (! function_exists ('compass_colophon')) Funktion compass_colophon () echo apply_filters ('compass_colophon_filter', ' 
"title =""rel =" home "> Unterstützt von WordPress und entworfen von Compass Design.
'); add_action ('compass_in_footer', 'compass_colophon');

Dies bedeutet, dass ich den Standardinhalt jetzt auf drei Arten überschreiben kann:

  • indem Sie eine neue Funktion erstellen compass_colophon () in meinem untergeordneten Thema, das die Funktion in meinem übergeordneten Thema überschreibt, da dies steckbar ist
  • durch Aushängen der compass_colophon () Funktion aus der compass_in_footer Action-Hook und Schreiben einer neuen Funktion, die ich an ihrer Stelle befestige
  • durch das Erstellen einer neuen Funktion, die ich dann an die compass_colophon_filter Filterhaken, der den Wert in my überschreibt apply_filters () Funktion

Im wirklichen Leben müssten Sie nicht so viele Optionen haben. Es ist also wahrscheinlicher, dass Sie Filter auf einen Teil des Inhalts Ihrer Funktion und nicht auf das Ganze anwenden.

So konnte ich zwei Filter erstellen, einen für den Copyright-Bereich und einen für die Credits:

if (! function_exists ('compass_colophon')) Funktion compass_colophon () echo '
'; echo apply_filters ('compass_copyright_filter', ' "title =""rel =" home "> '); echo apply_filters ('compass_copyright_filter', ' Unterstützt von WordPress und entworfen von Compass Design. '); Echo '
'; add_action ('compass_in_footer', 'compass_colophon');

Dann könnte ich entweder die gesamte compass_colophon - Funktion überschreiben, indem ich sie abhaken oder eine neue in mein Kindermotiv schreiben würde, oder ich könnte eine Funktion erstellen, die mit dem verbunden ist compass_copyright_filter oder compass_credits_filter Filterhaken, um jedes Element einzeln zu überschreiben.

Funktionen an Filter anhängen

Um eine Funktion mit einem Filterhaken zu verknüpfen, verwenden Sie die add_filter () Funktion, die zwei Parameter hat: den Namen des Hooks und den Namen der Funktion.

Um die Credits zu ändern, würde ich diese Funktion schreiben:

Funktion new_credits () ?>  Unterstützt von WordPress und entworfen von Rachel McCollin.   

Dies überschreibt den in meinem Original eingestellten Wert compass_credits_filter Filterhaken mit dem Inhalt meines new_credits () Funktion, aber alles andere in der compass_colophon () funktionieren gleich.

Sie können auch Prioritäten angeben, wenn Sie Funktionen an Filter anhängen, genau wie bei Action-Hooks. Funktionen mit niedrigerer Priorität werden zuerst ausgeführt.

Aushängen von Funktionen von Filtern

Wie bei Action-Hooks können Sie auch Funktionen von Filter-Hooks entfernen. Dazu verwenden Sie die Funktion remove_filter (), die drei Parameter aufweist: den Namen des Filter-Hooks, den Namen der Funktion und die Priorität, die obligatorisch ist, wenn eine Priorität festgelegt wurde, als die Funktion ursprünglich mit dem Filter verbunden war.

Also, um meine zu entfernen new_credits () Funktion benutze ich diese:

remove_filter ('compass_credits_filter', 'new_credits');

Die Code-Ausgabe würde dann auf den Wert zurückkehren, den ich in meinem Original angegeben habe apply_filters () Funktion. Also wenn ich das entfernen wollte new_credits () Funktion haben und nichts an seiner Stelle erscheinen, muss ich eine neue Funktion hinzufügen. Ich hänge dann die erste Funktion aus und hakt meine neue Funktion so ein:

Funktion no_credits () return;  remove_filter ('compass_credits_filter', 'new_credits'); add_filter ('compass_credits_filter', 'no_credits');

Zusammenfassung

Wenn Sie den Unterschied zwischen Aktions- und Filterhaken verstehen und in der Lage sind, beide effektiv zu verwenden, wird Ihre Entwicklung für das Thema und das Plugin einen Schub erhalten. Tatsächlich können Sie ohne Verwendung von Hooks mindestens eines Typs keine Plugins schreiben, da der Code in Ihren Plugins nur über die Aktions- und Filter-Hooks aktiviert wird, an die er angehängt ist.

In diesem Handbuch wurde beschrieben, wie Sie die gleiche Funktionalität mithilfe einer Funktion, eines Aktionshakens und eines oder mehrerer Filterhaken hinzufügen. Außerdem erfahren Sie, wie Sie Funktionen aus den Hooks entfernen und Ratschläge dazu finden, wann die einzelnen Techniken nützlich sind.

Sie können nicht nur Funktionen an Ihre eigenen Aktions- und Filter-Hooks hängen, sondern auch an die von WordPress bereitgestellten Aktionen und Filter, z. B. die wp_head Aktion oder die body_class Filter.