Eine Anleitung zu WordPress-Hooks
Veröffentlicht: 2021-07-19Das Hooks-System kann für Uneingeweihte entmutigend erscheinen, aber es ist eines der besten Dinge an WordPress. Dieses Handbuch hilft Ihnen, die Grundlagen von Hooks und deren Verwendung zu verstehen, und bietet Beispiele für die Verwendung und weitere Ratschläge.

Warum sollten Sie Haken verwenden?
Falls Sie es noch nicht wissen, ist es eine wirklich schlechte Idee, Kerndateien in WordPress (WP) zu ändern. Abgesehen von Sicherheitsrisiken werden Ihre Änderungen jedes Mal überschrieben, wenn Sie WP aktualisieren! Gleiches gilt für Plugins und Themes.
Natürlich könnten Sie den Überblick über jedes Update halten und neu zu implementieren , um die Änderungen. Sie können auch durch einen Bienenstock schlagen, um an den Honig zu gelangen. Es mag bequem erscheinen, aber Sie werden wahrscheinlich früher oder später gestochen werden.
Einfach ausgedrückt sollten Sie Hooks verwenden, da sie die Risiken einer Änderung der Kernfunktionalität ausgleichen .
In diesem Sinne kann die Bedeutung von Hooks nicht hoch genug eingeschätzt werden . Sie sind der Schlüssel zur Erweiterbarkeit von WP und ein Eckpfeiler der Plugin- und Theme-Ökosysteme. Sie werden sich viele Kopfschmerzen ersparen, indem Sie die Grundlagen lernen und gut anwenden.
Was sind Sie?
Sie können sich Hooks als Ereignisse vorstellen , die während der gesamten WP-Ladesequenz auftreten. Wenn WP auf einen Hook stößt, feuert es alle mit diesem Hook verbundenen Funktionen aus, bevor es fortfährt.
Sie können daher Hooks nutzen, um Funktionen hinzuzufügen oder Variablen in WP zu ändern . Sie können vorhandene Hooks verwenden und neue hinzufügen. Sie können die nicht benötigten Haken entfernen. Sie können denselben Haken mehr als einmal treffen und jede Funktion nach Belieben priorisieren. Es ist ein sehr flexibles System, das nur dadurch begrenzt ist, welche Hooks verfügbar sind und welche Daten sie bereitstellen.
Wie arbeiten Sie?
Sie fügen einem Hook eine oder mehrere Funktionen hinzu. Andere Funktionen können auch durch Ihr Theme, Plugins oder WP selbst hinzugefügt werden. Wenn WP geladen wird, trifft es auf den Haken. Es überprüft eine Liste aller Funktionen, die mit dem Hook verbunden sind. WP führt all diese Funktionen in der Reihenfolge ihrer Priorität aus . Sobald dies erledigt ist, wird das Laden von allem nach dem Hook fortgesetzt.
Wie sehen Sie aus?
Das Hinzufügen einer Funktion zu einem Hook sieht so aus:
add_action( $hook_name, $function_name, $priority, $arguments );
$hook_name ist der Name des Hooks, den Sie anvisieren möchten
$function_name ist der Name der Funktion, die Sie diesem Hook hinzufügen möchten
$ Priorität eine ganze Zahl angibt , die $ function_name 's Priorität in $ hook_name' s Warteschlange. Je niedriger die Zahl, desto höher die Priorität. Ab 1 kann diese Zahl beliebig hoch sein (innerhalb der Systemgrenzen), aber es ist unwahrscheinlich, dass sie höher als 40 ist. Der Standardwert ist 10.
$arguments ist eine ganze Zahl, die die Anzahl der Argumente angibt, die Sie in der Funktion verwenden. Diese muss mit der Anzahl der an die Funktion übergebenen Argumente übereinstimmen. Der Standardwert ist 1.
Das Entfernen einer Funktion aus einem Hook ist fast gleich:
remove_action( $hook_name, $function_name, $priority );
Die $ function_name und $ Priorität müssen die ursprünglichen Werte aus der entsprechenden add_action Funktion entsprechen, oder sie werden nicht entfernt werden!
Arten von Haken
Es gibt zwei Haupttypen von Hooks : Action- Hooks und Filter- Hooks. Sie sind in vielerlei Hinsicht ähnlich – add_action() und sein Gegenstück add_filter() werden beide auf die gleiche Weise aufgerufen. Der Unterschied liegt in der Funktion, die Sie durchlaufen:
// Code ausführen some
add_action( 'where_to_do_the_thing', 'do_the_thing');
Funktion do_the_thing() {
// Führen Sie eine Aktion aus, die erforderlich ist, um die Sache zu tun
}// Eine Variable ändern
add_filter( 'das_Ding', 'ändere_das_Ding');
Funktion change_the_thing( $thing ) {
// Filtere $thing und ändere alles, was du brauchst, dann…geben $thing zurück;
}
Beachten Sie, dass bei dem zweiten Beispiel, das erste Argument der functio gab n ist der Wert geändert wird. Alle zusätzlichen Argumente dienen nur dem Dienstprogramm und werden nicht über den Hook zurückgegeben.
Sie haben vielleicht bemerkt, dass ich $priority und $arguments weggelassen habe . Dies liegt daran, dass die Standardwerte in Ordnung sind. Wenn es hilft, ist das obige im Wesentlichen dasselbe wie:
// Code ausführen some
add_action( 'wo_to_the_thing', 'do_the_thing', 10, 1 );
// Eine Variable ändern
add_filter( 'the_thing', 'change_the_thing', 10, 1 );
Dies sind natürlich erfundene Beispiele, aber sie veranschaulichen den Hauptunterschied zwischen den beiden: Filter dienen zum Ändern von Variablen, Aktionen zum Hinzufügen von Code.
Weniger erfundene Beispiele
Angenommen, Sie möchten, dass WP eine E-Mail-Benachrichtigung sendet, wenn sich ein neuer Benutzer auf Ihrer Website anmeldet. In Bezug auf den WP-Codex finden Sie den Aktions- Hook user_register . Dadurch erhalten Sie eine Variable $user_id , mit der Sie die Details des Benutzers abrufen können. wp_mail() erledigt den Rest:
add_action( 'user_register', 'notify_on_user_registration');
Funktion notification_on_user_registration( $user_id ) {// Holen Sie sich den Benutzer
$user = get_user_by( 'id', $user_id );// E-Mail-Betreff und -Text vorbereiten
$subject = „Neue Benutzerregistrierung“;
$message = "Ein neuer Benutzer {$user->first_name} {$user->last_name} hat sich registriert.";// Senden Sie die E-Mail
wp_mail( '[email protected]', $Betreff, $Nachricht );
}
Was ist, wenn Sie Benutzer beim Anmelden auf Ihre Startseite umleiten möchten? Dies erreichen Sie ganz einfach mit dem Hook login_redirect , der die URL bereitstellt, zu der Benutzer standardmäßig umgeleitet werden:

add_filter( 'login_redirect', 'redirect_user_on_login');
Funktion redirect_user_on_login( $redirect_to ) {
return home_url();
}
Schon bald nachdem Sie dies hinzugefügt haben, stellen Sie schnell fest, dass Sie als Admin direkt auf das WP-Dashboard statt auf die Startseite geleitet werden möchten. Kein Problem – Sie ändern einfach den Hook so, dass er nur für Admins funktioniert:
add_filter( 'login_redirect', 'redirect_user_on_login', 10, 3 );
Funktion redirect_user_on_login( $redirect_to, $request, $user ) {
// Ändern Sie die Anmelde-URL, es sei denn, der Benutzer ist ein Administrator
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'administrator', $user->roles ) ) {
geben $redirect_to zurück; // Administratoren auf Standard umleiten (Admin-Bereich)
}
}geben $redirect_to zurück;
}
Beachten Sie, dass $priority und $arguments ins Spiel gekommen sind!
Da Sie Zugriff auf das dritte Argument des Hooks benötigen, um die Benutzerebene zu überprüfen, müssen Sie 3 Argumente anzeigen; Sie übergeben einen Wert von 3.
Der $priority- Wert von 10 entspricht natürlich dem Standardwert, wird jedoch angegeben, um den oben benötigten $arguments- Wert zu erreichen .
Erstellen Sie Ihre eigenen Hooks
Die Möglichkeit, benutzerdefinierte Haken zu erstellen, liegt in Ihren Händen! Die von WP bereitgestellten Funktionen sehen wie folgt aus:
do_action( $hook_name, $arg_1, $arg_2 … $arg_n );
apply_filters( $hook_name, $arg_1, $arg_2 … $arg_n );
Wieder sind sie sich ähnlich. Beide Funktionen akzeptieren einen Namen – hier benennen Sie den Hook. Alle folgenden Argumente sind dieselben Argumente, die den Funktionen zur Verfügung gestellt werden, die Sie diesem Hook hinzufügen. apply_filters() muss mindestens ein zusätzliches Argument haben (das gefilterte Argument), aber alle anderen sind optional.
Wenn Sie beispielsweise direkt vor Ihrem öffnenden Body-Tag ein Analytics-Skript einfügen möchten, die header.php jedoch nicht in ein Chaos verwandeln möchten :
<?php do_action( 'before_body_tag'); ?;>
</head>
<Körper>
Dann können Sie so viele Skripte hinzufügen, wie Sie benötigen:
add_action( 'before_body_tag', 'add_analytics_custom');
Funktion add_analytics_custom() {
// <script>-Tags und Analysecode finden Sie hier
}
apply_filters() funktioniert etwas anders. Wie oben besprochen, werden Filter verwendet, um Werte zu modifizieren. Da Filter einen Wert zurückgeben, weisen Sie Ihren apply_filters()- Aufruf einer Variablen zu:
<?php $text = apply_filters( 'call_to_action_text', 'Über uns' ); ?>
<a href=”<?php echo get_permalink( 'about' ); ?>“ class=“button cta“>
<?php echo $text; ?>
</a>// Alternativ können Sie das Ergebnis von apply_filters() direkt zurückgeben
<a href=”<?php echo get_permalink( 'about' ); ?>“ class=“button cta“>
<?php echo apply_filters( 'call_to_action_text', 'Über uns'); ?>
</a>
Anschließend können Sie die gefilterte Variable nach Bedarf ändern:
add_filter( 'call_to_action_text', 'change_call_to_action_text');
Funktion change_call_to_action_text( $text ) {
if ( is_front_page() ) {
$text = 'Mehr entdecken';
}$text zurückgeben;
}
Die Nachteile
Kein System ist perfekt, und Hooks sind keine Ausnahme. Wenn es um Core-Hooks geht, muss man sich im Allgemeinen mit dem begnügen, was man bekommt. Sehr gelegentlich werden Sie auf Situationen stoßen, in denen ein Haken nicht an der für Sie bequemsten Stelle ist. In diesem Fall kann nicht viel getan werden, also sehen Sie es als Chance, eine kreative Lösung zu finden!
Da Hooks überall innerhalb der WP-Verzeichnisstruktur vorhanden sein können, ist es manchmal schwierig herauszufinden, wo eine bestimmte Logik stattfindet. Dies kann ausgeglichen werden, indem Sie Ihre Funktions-Hooks in ihre eigenen Dateien aufteilen.
Weitere Ratschläge
- Achten Sie beim Erstellen von Funktionen für Hooks darauf, dass der Name eindeutig ist, da sonst ein Konflikt auftritt. Das gleiche gilt für Ihre benutzerdefinierten Hook- und Filternamen!
- Verwenden Sie Haken, um Ihre Vorlagen übersichtlich zu halten. Ein paar generische do_action()- Hooks, die in Ihre Vorlagen eingefügt werden, können helfen, die Logik vom Markup fernzuhalten (fast immer eine gute Idee).
- Wenn Sie ein neues Plugin installieren, prüfen Sie, welche Hooks es bietet und überlegen Sie, wie Sie sie verwenden können. Dies ist besonders nützlich für die unvermeidlichen Zeiten, in denen ein Plugin nicht ganz das tut, was Sie wollen.
- Beim Hinzufügen einer Aktion oder eines Filters können Sie den Funktionsnamen durch die Funktion selbst ersetzen. Dies kann dazu beitragen, dass Aktionen und Filter in sich geschlossen bleiben. Auf diese Weise hinzugefügte Funktionen können nicht mit remove_action() oder remove_filter() entfernt werden , seien Sie also vorsichtig!
add_action( 'where_to_do_the_thing', function() {
echo 'Die Sache ist erledigt.';
}, 10, 1);
- Sehen Sie sich die anderen verfügbaren Hook-Funktionen an, wie did_action() oder has_action() . Sie wissen nie, wann es nützlich ist, sich ihrer nur bewusst zu sein.
Zusammenfassung
Die Verwendung von Haken ist eine Frage der Gewohnheit. Versuchen Sie, sich bei jeder Arbeit an Ihrem WP-Projekt zwei einfache Fragen zu stellen:
- „Gibt es einen Haken, der mir das erleichtert?“
- „Kann ich einen Haken hinzufügen, der es mir in Zukunft leichter macht?“
Wenn man sich der WP-Entwicklung mit dieser Einstellung nähert, werden sich viele Türen öffnen.
Die Beispiele in diesem Leitfaden sind die Spitze des Eisbergs. Allein im WP-Kern gibt es Hunderte von Hooks, ganz zu schweigen von der riesigen Bibliothek an Plugins und Themes. Eine vollständige Liste der wichtigsten WP-Hooks finden Sie in der WP- Aktionsreferenz und der Filterreferenz .
Wenn Sie Hilfe bei Ihrer Webentwicklung benötigen, zögern Sie nicht, uns zu kontaktieren.
