Advertisement
  1. Code
  2. WordPress
Code

WordPress-Aktionen und Filter: Was ist der Unterschied?

by
Length:LongLanguages:

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

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 der Datei functions.php Ihres Themas Code hinzugefügt haben, 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 können 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 geschieht, 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 Aktions-Hooks mit der Funktion do_action() hinzufügen, 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 Funktion apply_filters() verwenden, die ich in Kürze demonstrieren werde. Wie das Wort "Anwenden" anzeigt, wenden Sie Filter auf vorhandenen Code an, während eine mit do_action() erstellte Aktion leer ist, bis Sie Funktionen mit dem Code verknüpfen.

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:

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, compass_colophon(), enthält, die direkt im Code aufgerufen wird.

Diese Funktion befindet sich in der Datei functions.php meines übergeordneten Designs. Ich kann es direkt in der footer.php-Datei meines Themes aufrufen:

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 Funktion compass_colophon() in meiner Fußzeilendatei aufzurufen, kann ich an dieser Stelle einen Action-Hook in der footer.php-Datei hinzufügen, indem Sie Folgendes hinzufügen:

Die Funktion do_action() 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 meiner functions.php-Datei füge ich dies mit meiner Funktion hinzu:

Dadurch wird meine Funktion an die Aktion compass_in_footer angehängt, was bedeutet, dass der Code in meiner Funktion an der Stelle im Code 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.

Dies hat den Vorteil, dass Sie mehrere Funktionen mit derselben Aktion verknüpfen können, und Sie können die Priorität festlegen, sodass sie in der gewünschten Reihenfolge ausgelöst werden.

Nehmen wir an, ich habe eine andere Funktion, die ich an meinen compass_in_footer-Hook namens compass_smallprint() haken möchte, der etwas mehr Kleingedrucktes enthält:

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

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 Funktion remove_action() tun.

Wenn ich also meine compass_smallprint() - Funktion nicht ausführen möchte, hebe ich sie wie folgt aus der compass_in_footer-Aktion:

Die Funktion remove_action() hat drei Parameter: den Namen des Aktions-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 Funktion remove_all_actions():

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 (mithilfe der Funktion apply_filters(), wickeln Sie diesen Code um den Code in Ihrem Design oder Plugin, 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

Die Funktion apply_filters() verfügt über 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.

Zurück zu meiner compass_colophon() - Funktion konvertiere ich diese in einen Filter, indem ich den Inhalt meiner footer.php-Datei in der apply_filters() - Funktion hinzufüge:

Dies gibt den Code aus, den ich als zweiten Parameter meiner Funktion apply_filters() festgelegt habe.

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.

So füge ich die Aktion compass_in_footer zu meiner footer.php-Datei hinzu, und zwar mit der Funktion do_action() wie oben beschrieben, und dann erstelle ich eine Funktion in meiner functions.php-Datei, die mit dieser Aktion verknüpft ist und einen Filter enthält:

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

  • durch das Erstellen einer neuen Funktion namens compass_colophon() in meinem untergeordneten Thema, die die Funktion in meinem übergeordneten Thema überschreibt, da dies steckbar ist
  • indem Sie die compass_colophon() - Funktion aus dem Action-Hook compass_in_footer aushaken und eine neue Funktion schreiben, die ich an ihrer Stelle anhebe
  • durch das Erstellen einer neuen Funktion, die ich dann an den Filterhaken compass_colophon_filter haken, der den Wert in meiner Funktion apply_filters() überschreibt

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:

Dann könnte ich entweder die gesamte compass_colophon-Funktion überschreiben, indem ich sie abhaken oder ein neues in mein Kindermotiv schreibe, oder ich könnte eine Funktion erstellen, die mit dem Filter compass_copyright_filter oder compass_credits_filter verbunden ist, um jedes Element einzeln zu überschreiben.

Funktionen an Filter anhängen

Um eine Funktion an einen Filterhaken anzuhängen, verwenden Sie die Funktion add_filter(), die zwei Parameter enthält: den Namen des Hooks und den Namen der Funktion.

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

Dies überschreibt den Wert, der in meinem ursprünglichen compass_credits_filter-Filter-Hook mit dem Inhalt meiner Funktion new_credits() festgelegt ist, behält jedoch alle anderen Funktionen in der Funktion compass_colophon() bei.

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 Aktionshaken können Sie auch Funktionen von Filterhaken entfernen. Dazu verwenden Sie die Funktion remove_filter(), die drei Parameter enthält: 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.

Um meine new_credits() - Funktion zu entfernen, verwende ich Folgendes:

Die Codeausgabe würde dann auf den Wert zurückkehren, den ich in meiner ursprünglichen apply_filters() - Funktion angegeben habe. Wenn ich also die new_credits() - Funktion entfernen wollte und nichts an ihrer Stelle erscheinen lassen würde, müsste ich eine neue Funktion hinzufügen. Ich hänge dann die erste Funktion aus und hakt meine neue Funktion so ein:

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 Aktion wp_head oder body_class.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.