✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Ratgeber: Alles über Hooks in WordPress

20

Wurde Ihnen jemals gesagt, dass die Lösung für Ihr Problem darin besteht, dass Sie sich an etwas „anhängen” müssen, um Ihr Ding zu erledigen, oder dass Sie es verwenden, add_filterohne wirklich zu verstehen, warum es Dinge durcheinander bringt? Hooks bilden die Grundlage von WordPress und bieten Themen und Plugins eine Möglichkeit zur Interaktion oder Code ändern In diesem Beitrag erklären wir, was Hooks sind, wie sie funktionieren und wie wir sie verwenden können.

Was sind Haken?

Während WordPress seinen Code durchläuft (vom Beginn des Ladens von Klassen, dem Laden von Plugins, dem Laden des Designs, der Abfrage für die aktuelle Anfrage bis zum abschließenden Rendern des HTML), durchläuft es eine Reihe von „Checkpoints”; Haken. Wenn ein Hook auftritt, stoppt WordPress seine Arbeit – und überprüft, ob es irgendwelche Funktionen (im Design, Plugin oder WordPress selbst) gibt, die für die Ausführung an diesem Hook registriert sind. Wenn dies der Fall ist, führt WordPress alle diese Funktionen aus und macht dann dort weiter, wo es aufgehört hat.

Dadurch können Plugins, Themes und WordPress selbst bestimmte Punkte „anhängen”, um zB Stylesheets im <head>Tag des Themes hinzuzufügen, die Art und Weise zu ändern, wie WordPress Beiträge abfragt, oder einfach den Inhalt der Beiträge zu ändern, wenn dies gewünscht wird.

Es gibt zwei Arten von Haken; Aktionen und Filter. Sie funktionieren ziemlich ähnlich, aber mit einer Ausnahme, auf die wir weiter unten näher eingehen werden.

Aktionen und Filter

Um sich an eine Aktion oder einen Filter anzuschließen, müssen Sie definieren, welchen Hook (mit seinem Namen) Sie verwenden möchten, und einen Callback definieren – das ist der Name der Funktion, die Sie ausführen möchten. In den meisten Fällen stellen die Hooks Parameter oder Variablen bereit, die für den Hook relevant sind.

Aktionen sind einfach „Checkpoints” in der Ausführung von WordPress, an denen Sie eine Aufgabe ausführen oder etwas wiederholen können. In einigen seltenen Fällen können Sie ein Objekt (in Parametern bereitgestellt) ändern, sodass alle folgenden Ausführungen mit diesem geänderten Objekt arbeiten.

Filter dienen zum Ändern einer Variablen oder Ausgabe. Alle Filter-Hooks stellen die Variable, die Sie ändern können, als ersten Parameter bereit und ermöglichen Ihnen, sie zu ändern oder etwas anderes zurückzugeben.

WordPress führt viele Hooks aus, aber Sie können Ihre eigenen in Ihrem Plugin oder Design erstellen. Dadurch können Entwickler Ihren Code erweitern und ändern; zum Beispiel das Modifizieren eines Plugins über ein Theme oder das Modifizieren des Parent-Themes über das Child-Theme.

Viele Funktionen von WordPress, die normalerweise zum Drucken von Beiträgen verwendet werden, sind auch Filter oder Aktionen. Die Funktion gibt zum Beispiel den the_title()Titel des Beitrags aus, ist aber auch ein Filter.

Schauen wir uns an, wie wir uns in der Praxis an diese anschließen.

Einhaken in Aktionen

Um sich an eine Aktion anzuhängen, verwenden Sie die Methode add_action(). Als Minimum benötigt es zwei Parameter; der Hakenname und der Rückruf; den Namen der Funktion, die Sie ausführen möchten. Optional können Sie die Priorität als dritten Parameter angeben und die Anzahl der Argumente definieren, die an Ihre Callback-Funktion übergeben werden. Wir werden uns die beiden optionalen Parameter später ansehen, aber jetzt ist hier ein Beispiel für add_action:

add_action('init', 'my_function_name'); function my_function_name() { // Do your stuff }

Der erste Parameter add_actionist der Name der Aktion; in diesem Fall init, was ein ziemlich häufiger WordPress-Hook ist, der während der Initialisierung passiert. Der zweite Parameter ist Ihr Callback, in diesem Fall der Name der Funktion, die wir ausführen möchten. Dann müssen Sie nur noch eine Funktion mit diesem Namen definieren und Ihren Code darin einfügen.

Sie können auch anonyme Funktionen verwenden, bei denen Sie die Funktion darin definieren, add_actionanstatt wie folgt einen Funktionsnamen anzugeben;

add_action('init', function() { // Do your stuff });

Viele Entwickler bevorzugen diese Methode, da dadurch das Risiko vermieden wird, eine gleichnamige PHP-Funktion neu zu definieren.

Wenn Sie eine in einer PHP-Klasse definierte Funktion ausführen müssen, müssen Sie ein Array als Callback-Parameter bereitstellen. wobei das erste Element das Klassenobjekt und das zweite Element der Funktionsname ist:

class MyClass { public function __construct() { add_action('init', [$this, 'myFunctionName']); }   public function myFunctionName() { // Do your stuff } }

Anhängen an Filter

Um sich an einen Filter anzuhängen, verwenden Sie die Funktion add_filter(). Ähnlich wie bei den obigen Aktionen ist der erste Parameter der Filtername und der zweite Ihr Callback. Optional können Sie als dritten Parameter die Priorität und als vierten die Anzahl der Argumente angeben. Hier ist ein Beispiel dafür add_filter:

add_filter('the_title', 'my_function_name'); function my_function_name($title) { // Do your stuff return $title; }

Im obigen Beispiel hängen wir uns an den Filter the_title(der den Beitragstitel ausgibt) und weisen WordPress an, unsere Funktion auszuführen. Alle Filter liefern immer ein Argument; die zu ändernde Variable. In meiner Funktion habe ich es benannt, $titleda ich weiß, dass es den Beitragstitel enthält. Innerhalb der Funktion kann ich sie ändern oder die Variable vollständig überschreiben. Denken Sie daran, dass Sie in Filtern immer die Variable zurückgeben müssen. Wenn Sie in Ihrer Callback-Funktion nichts zurückgeben, wird die Variable leer. Wenn ich die return-Anweisung im obigen Beispiel übersprungen hätte, würden keine Beitragstitel jemals irgendwo widerhallen.

Das Variablenargument und die Regel, etwas in Ihrer Callback-Funktion zurückzugeben, ist praktisch der einzige Unterschied zwischen Filtern und Aktionen. Alles andere funktioniert genauso. Sie können den Beispielen für anonyme Funktionen und Klassen folgen, die oben für Aktionen für Filter gezeigt werden, sowie die optionalen Parameter Priorität und Anzahl der Argumente; die wir uns als nächstes ansehen werden.

Priorität

Der dritte (optionale) Parameter von add_actionand add_filterist eine Ganzzahl, die die Priorität Ihrer Callback-Funktion definiert. Dies ist nützlich, wenn es mehrere Funktionen gibt (nicht unbedingt von Ihnen in Ihrem Design oder Plugin, denken Sie daran, dass WordPress selbst seine eigenen Hooks verwendet) und Sie entscheiden müssen, welche zuerst ausgeführt werden soll.

Wenn keine Priorität angegeben ist, wird standardmäßig 10 verwendet. Je niedriger die Priorität, desto früher wird sie ausgeführt, und je höher die Priorität, desto später wird sie ausgeführt. Sie können keine negative Priorität angeben.

Stellen Sie sich mehrere Callback-Funktionen vor, die in registriert sind init. Wenn für mehrere Rückrufe keine Priorität angegeben wurde, führt WordPress sie in der Reihenfolge aus, in der sie gefunden wurden (z. B. in functions.phpoder Ihrem Plugin-Code).

add_action('init', 'my_function_name'); add_action('init', 'my_second_function_name'); add_action('init', 'my_third_function_name', 12); add_action('init', 'my_fourth_function_name', 1);

Dies wäre die Reihenfolge, in der WordPress die obigen Callbacks ausführt:

  1. my_fourth_function_name(Priorität 1)
  2. my_function_name(Priorität 10)
  3. my_second_function_name(Priorität 10, erscheint aber später im Code)
  4. my_third_function_name(Priorität 12)

Anzahl der Argumente

Normalerweise liefern Hooks einige zusätzliche Daten, die für die Callback-Funktionen relevant und nützlich sind. Zum Beispiel save_postbietet die Aktion (wird ausgeführt, wenn ein Beitrag aktualisiert wird) zwei mögliche Argumente; die Beitrags-ID und das Beitragsobjekt. Diese sind nützlich für Operationen, die Sie häufig an diesem Hook ausführen müssen (wenn Sie beispielsweise ein Post-Meta speichern möchten, benötigen Sie die Post-ID).

Wenn für eine Aktion oder einen Filter keine Anzahl von Argumenten angegeben wurde, ist der Standardwert 1. Aus diesem Grund müssen Sie 1 nicht definieren, um add_filterauf die Variable zuzugreifen, an die der Filter angeschlossen ist. Aktionen können jedoch keine Argumente übergeben, obwohl die Anzahl der Argumente standardmäßig auf 1 gesetzt ist.

Schauen wir uns ein Beispiel für die Definition der Anzahl von Argumenten an und wie wir in unserer Callback-Funktion auf sie zugreifen:

add_action('save_post', 'my_function_name', 10, 2); function my_function_name($post_id, $post) { // Do your stuff }

Im obigen Beispiel weisen wir WordPress an, zwei Argumente an unsere Callback-Funktion zu übergeben. Denken Sie daran, dass wir die Priorität als dritten Parameter definieren müssen, also definieren wir normalerweise den Standardwert, der 10 ist. Für unsere Callback-Funktion können wir jetzt die gleichen Argumente definieren, nach denen wir gefragt haben, im obigen Beispiel waren es 2.

Wenn wir im obigen Beispiel die Anzahl der Argumente auf 1 gesetzt hätten, würde nur das erste Argument in unserer Callback-Funktion ausgefüllt werden. Die zweite, $post, wäre undefiniert.

Was ist, wenn wir Daten benötigen, die nicht im Hook übergeben wurden?

Es liegt ganz beim Entwickler, der den Hook erstellt hat, zu definieren, welche Argumente übergeben werden können. add_actionDas bedeutet, dass Sie in Ihrem oder nicht einfach die gewünschten oder benötigten Argumente erzwingen können add_filter. Glücklicherweise haben wir in den meisten Fällen Alternativen, um die benötigten Variablen zu erhalten. Wenn Sie sich an eine Aktion oder einen Filter anschließen, von dem Sie wissen, dass bestimmte globale Variablen definiert werden sollten, können Sie in Ihrer Callback-Funktion auf diese globalen Variablen zugreifen. Außerdem hat WordPress eine ganze Reihe von bedingten Tags, die Sie in Ihren Hook-Funktionen verwenden können (mit Ausnahme der sehr frühen Hooks, die auftreten, bevor WordPress diese bedingten Tags definiert).

Sehen wir uns ein Beispiel für den Zugriff auf globale Variablen an. Der Filter the_titlestellt die Post-ID als optionales Argument bereit, auf das wir zugreifen können, indem wir es als akzeptables Argument definieren;

add_filter('the_title', 'my_function_name', 10, 2); function my_function_name($title, $post_id) { if ($post_id == 1) { return 'First post ever!'; } return $title; }

Wir können jedoch dasselbe Ergebnis erzielen, indem wir;

Wenn Sie wissen, dass eine globale Variable durch den Punkt definiert wird, an dem der Hook ausgeführt wird, können Sie sie in Ihrer Callback-Funktion als global definieren und von dort aus auf die Daten zugreifen. Zum Beispiel würde die Definition global $wp_queryim obigen Beispiel Ihnen auch Zugriff auf das vollständige wp_query-Objekt innerhalb Ihres Funktions-Callbacks geben.

Bedingte WordPress-Tags sind äußerst nützlich. Sofern Sie nicht an einem Haken hängen, der sehr früh in der Ausführung von WordPress auftritt, sind sie verfügbar. Es gibt bedingte Tags, um zu überprüfen, auf welcher Seite (Vorlage) Sie sich befinden, ob Sie sich in einem Menü oder einer Post-Schleife befinden, und vieles mehr. Wenn Sie beispielsweise die Post-Abfrage mithilfe des Hooks ändern, pre_get_postsist es sehr nützlich, sicherzustellen, dass Ihr Code nur in bestimmten Fällen ausgeführt wird. Zum Beispiel;

add_action('pre_get_posts', 'my_function_name'); function my_function_name($query) { if (!is_admin()) { // Do your stuff } }

Da der Hook pre_get_postssowohl im Admin- als auch im Frontend ausgeführt wird, können wir ein bedingtes Tag verwenden, um sicherzustellen, dass unser Code nur die Frontend-Abfrage betrifft.

Erstellen Sie Ihre eigenen Haken

Sie können Ihre eigenen Aktionen und Filter definieren. Wenn Sie ein Theme- oder Plugin-Entwickler sind, werden Sie dazu ermutigt, damit andere Ihren Code ändern können, ohne den Quellcode zu ändern.

Registrieren Sie eine Aktion mit do_action()und einen Filter mit apply_filters().

Das do_action()erfordert mindestens 1 Parameter; der Hakenname. Denken Sie daran, dass der Hook-Name eindeutig sein muss (benennen Sie ihn nicht zB, initda dies ein Kern-WordPress-Hook ist). Platzieren do_action()Sie dort, wo der Haken erscheinen soll. Zum Beispiel können Sie den Hook in Ihrem Theme header.phpdirekt nach body platzieren, um einen Hook zu definieren, wo Entwickler Skripte oder andere Inhalte ausgeben können.

do_actionSie können nach dem Hook-Namen beliebig viele Parameter hinzufügen. Denken Sie daran, welche Datenentwickler in Ihren Hooks benötigen würden, die sonst nicht leicht zugänglich sind.

Das apply_filters()erfordert mindestens 2 Parameter; den Hook-Namen und die Variable, für die Sie den Filter registrieren. Beispielsweise kann Ihr Design einen Filter um einige HTML-Klassen registrieren, damit Entwickler diese ändern oder hinzufügen können:

apply_filtersWie bei Aktionen können Sie nach den beiden obligatorischen Parametern beliebig viele Parameter hinzufügen .

Fazit und nützliche Ressourcen

Ich hoffe, Sie haben damit ein solides Verständnis dafür erlangt, wie WordPress den größten Teil seines Codes ausführt, wie Sie Code ändern können und wie Sie als Entwickler anderen Entwicklern erlauben können, auch Änderungen an Ihrem Code vorzunehmen.

Aufnahmequelle: awhitepixel.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen