Die Grundlagen von Action Hooks in WordPress
Jedes Mal, wenn man anfängt, sich mit fortgeschrittener Programmierung zu befassen – sei es in WordPress oder einem anderen Framework, einer Bibliothek, einer Grundlage oder einer Programmiersprache – gibt es Zeiten, in denen neue Konzepte oft schwieriger zu verstehen sind als andere.
Ich habe im Allgemeinen festgestellt, dass dies immer dann zutrifft, wenn eine Person die Grundlagen von, sagen wir, objektorientierter Programmierung gelernt hat, aber nicht mit den Nuancen bestimmter Dinge wie Entwurfsmustern in Berührung gekommen ist.
Ein typisches Beispiel: Ich habe in anderen Beiträgen über das ereignisgesteuerte Designmuster (oder das Publish-Subscribe oder Pub/Sub, wie manche es gerne bezeichnen) geschrieben.
Ja, es gibt einige Unterschiede, aber die allgemeine Idee ist, dass etwas passiert und ein Ereignis ausgelöst wird und alles, was auf dieses Ereignis wartet oder dieses Ereignis abonniert, antwortet.
Photo by Claus Grünstäudl on Unsplash
Dies ist das primäre Muster, das WordPress verwendet, das es uns ermöglicht, uns buchstäblich in bestimmte Ausführungspunkte einzuklinken. Wir können diese allgemein als Aktionshaken in WordPress konzipieren.
Wie auch immer, die Anwendung stellt uns bestimmte Punkte zur Verfügung, um unsere eigene Funktionalität hinzuzufügen. Sobald diese Funktionalität registriert ist, verlässt WordPress sozusagen seine Codebasis, springt in unsere und kehrt dann zu unserer zurück.
Es ist leicht zu verstehen, aber was ist, wenn Sie Bereiche in Ihrem Code offenlegen möchten, die es anderen ermöglichen, sich in Ihren Code einzuklinken?
Action-Hooks in WordPress
Bevor Sie sich ansehen, wie WordPress dieses Muster implementiert, ist es wichtig, die Grundlagen dieses Musters zu verstehen. Obwohl dies keineswegs umfassend ist, soll es helfen, ein grundlegendes Verständnis des Musters zu vermitteln, damit es möglich ist, WordPress-zentrierten Code zu lesen und zu schreiben.
Wie kann man sich also das Pub/Sub-Muster vorstellen? Wikipedia definiert es wie folgt:
In der Softwarearchitektur ist Publish-Subscribe ein Messaging-Muster, bei dem Absender von Nachrichten, die als Publisher bezeichnet werden, die Nachrichten nicht so programmieren, dass sie direkt an bestimmte Empfänger, die als Abonnenten bezeichnet werden, gesendet werden, sondern stattdessen veröffentlichte Nachrichten in Klassen kategorisieren, ohne zu wissen, welche Abonnenten, falls vorhanden, es kann sein. In ähnlicher Weise bekunden Abonnenten Interesse an einer oder mehreren Klassen und erhalten nur Nachrichten, die von Interesse sind, ohne zu wissen, welche Herausgeber es gegebenenfalls gibt.
Das Muster verstehen
Das kann am Anfang viel sein. Ich weiß es nicht, aber lass es uns aufschlüsseln:
- Es gibt einen Dienst, in unserem Fall WordPress, der für die Veröffentlichung von Nachrichten an alle Abonnenten verantwortlich ist (er weiß nicht unbedingt, wer zuhört).
- Wenn ein Abonnent zuhört, wird er dann handeln, wann immer er diese Aktion hört.
- Sobald der Code des Abonnenten ausgeführt ist, kehrt das Programm zum ursprünglichen Ausführungspunkt zurück (wo der Herausgeber die Nachricht gesendet hat).
Es gibt Nuancen wie asynchrone Funktionalität und ähnliches, aber das ist fortgeschrittener, als ich es in diesem speziellen Beitrag vorziehen würde. Schließlich soll damit eine Grundlage für das Verständnis und die Umsetzung der Funktionalität gelegt werden.
Asynchrone Funktionalität kann in Threading oder Ajax einfließen und das sind wichtige Themen, dies ist nicht dieser Beitrag.
Wie sieht dieser Look in WordPress aus?
Der vielleicht einfachste Weg, dieses spezielle Muster in WordPress zu beschreiben, ist die Verwendung der Funktionsaufrufe:
- do_action
- add_action
Manchmal kann die Nomenklatur verwirrend sein, aber einfach ausgedrückt: do_action veröffentlicht und ein Ereignis und fügt_aktion Abonnenten zu einem Ereignis hinzu. Oder vielleicht eine bessere Art zu denken ist:
do_action weist WordPress an, alle hinzugefügten Aktionen auszuführen.
Manchmal ist es hilfreich, einfache Sätze zu haben, um sich daran zu erinnern, wie die Dinge funktionieren. Ich weiß nicht, ob das obige der einprägsamste Satz oder der einprägsamste ist, aber es ist etwas, oder?
Beachten Sie außerdem, dass do_action und add_action Kernelemente von WordPress sind und auch für unsere Entwicklung verfügbar sind. Bevor wir fortfahren, werfen wir einen Blick darauf, was jedes bedeutet:
Für do_action :
Diese Funktion ruft alle Funktionen auf, die an Aktionshaken angehängt sind
$tag. Es ist möglich, neue Action-Hooks zu erstellen, indem Sie einfach diese Funktion aufrufen und den Namen des neuen Hooks mithilfe des$tagParameters angeben.
Oder noch einfacher ausgedrückt:
Führen Sie Funktionen aus, die an einem bestimmten Aktionshaken hängen.
Wenn Sie sich auf Hooks beziehen, können dies entweder von WordPress definierte Hooks oder benutzerdefinierte Hooks sein, die Sie in Ihrem Design oder Ihrem Plugin angeben.
Wie für add_action :
Aktionen sind die Hooks, die der WordPress-Kern an bestimmten Punkten während der Ausführung startet oder wenn bestimmte Ereignisse eintreten. Plugins können angeben, dass eine oder mehrere ihrer PHP-Funktionen an diesen Stellen ausgeführt werden, indem sie die Action-API verwenden.
Und ähnlich einfacher ausgedrückt:
Verknüpft eine Funktion mit einer bestimmten Aktion.
Die praktische Einstellung ist etwas anders, da wir im Allgemeinen add_action verwenden, um unseren eigenen Code zu WordPress hinzuzufügen.
Ein praktisches Beispiel
Vielleicht hast du zum Beispiel so etwas geschrieben :
<?php
add_action('wp_insert_post_data', __NAMESPACE__. 'processPermalink');
/**
* Processes the permalink so we can remove any characters that may cause a problem when communicating
* with the API.
*
* @param array $data The array of information about the post.
* @return array $data The data without the malformed information in the post name for the URL.
*/
public function processPermalink($data)
{
if (!in_array($data['post_status'], array('draft', 'pending', 'auto-draft'))) {
$data['post_name'] =
preg_replace(
'/(%ef%b8%8f|™|®|©|™|®|©|™|®|©)/',
'',
$data['post_name']
);
}
return $data;
}
In diesem Fall gibt es irgendwo in der WordPress-Codebasis einen do_action – Aufruf für den wp_insert_post_data- Hook, der eine Funktion akzeptiert und ihr mindestens einen einzigen Parameter übergibt.
Hinzufügen eigener Haken
Aber was ist, wenn Sie anderen Entwicklern die Möglichkeit geben möchten, sich in Ihr Plugin oder Thema einzuklinken? In diesem Fall sollten Sie sich mit der Verwendung von do_action befassen, und die zuvor in diesem Dokument verlinkte Seite bietet alles, was Sie zum Einrichten benötigen.
Meiner Meinung nach ist es tatsächlich viel einfacher als mit add_action zu arbeiten, da add_action dafür sorgt, dass wir uns nicht nur in einen bestehenden Publisher einklinken, sondern dass wir unsere eigene benutzerdefinierte Logik hinzufügen.
do_action hingegen erfordert, dass wir einen Namen der auszuführenden Funktion und dann die Liste der Argumente angeben, die an die auszuführende Funktion übergeben werden sollen.
Das ist es?
In ungefähr so einfachen Worten, wie ich es machen kann, ja. Es gibt einige Nuancen in Bezug auf Priorität, Anzahl der Argumente und die Arbeit mit Namespaces und objektorientierter Programmierung. Aber auch das liegt außerhalb des Rahmens dieses speziellen Beitrags. Vielleicht gehe ich in einem anderen Beitrag näher darauf ein.
Wenn Sie jedoch mit den Grundlagen nicht vertraut sind:
- das Pub/Sub-Muster,
- tun_aktion,
- und add_action
Sie sind jetzt sicher genug, um den Code, mit dem Sie arbeiten, zu lesen, zu verstehen, wie der Code funktioniert, und bei Bedarf sogar Ihre eigenen Lösungen zu implementieren.
Ich schreibe gerade ein eBook (zusammen mit einer Vielzahl anderer Premium-Inhalte). Wenn Sie interessiert sind, sehen Sie sich an, was Sie bekommen.



