Kleine CodeCrowd von programmieren lernen
Leon Hoffmann von codeCrowd Leon, 14 Jan 2020

Notiz: Action Hooks im WordPress Development

Programmieren Lernen Blog Featured-Thumbnail Action Hooks im WordPress Development

In der Kategorie NOTIZveröffentliche ich meine persönlichen Notizen, die ich mache, während ich selbst neue Themenbereiche erlerne. Vielleicht helfen diese Notizen ja auch dir.🤓

WordPress Hooks – Action-Hooks

Mit Hooks kannst du verändern, wie WordPress funktioniert, ohne WordPress-Core selbst zu verändern.
Es gibt Action-Hooks und Filter-Hooks. In dieser Notiz geht es um Action Hooks.
Mit Action-Hooks kannst du Funktionen an einer bestimmten Stelle des WordPress-Build-Prozesses (also beim Laden der Website) oder bei einem WordPress-Event (z.B. wenn eine Post gespeichert wird) ausführen.

Ein Action-Hook sieht folgendermaßen aus:

<?php

// Die Action-Hook Syntax (kann keine oder mehrere Parameter/Argumente enthalten)
do_action( $tag, $arg1 );

// Die Action-Hook Syntax mit mehreren Parametern/Argumenten
do_action( $tag, $arg1, $arg2, $arg3 );

// Der Action-Hook wp_head, ein Hook ohne Parameter/Argumente. Feuert im <code><head></code> Bereich der WordPress-Website, z.B. um ein Stylesheet einzubinden.
do_action( 'wp_head' );

// Der Action-Hook save_post, mit 2 Parametern/Argumenten. Feuert, wenn ein Post abgespeichert wird.
do_action( 'save_post', $post_ID, $post );

 ?>

Du wirst Action-Hook selten direkt verwenden, sondern eine Funktion für sie registrieren!
Dies tust du mit der Funktion add_action().
do_action() verwendest du eher, um Custom Hooks zu schreiben und in deinem Theme oder Plugin zu registrieren, damit du sie später per add_action() ansprechen kannst.

<?php

// Die Action-Hook Syntax um eine Funktion für einen Hook zu registrieren
add_action( $tag, $function, $priority, $accepted_args );

 ?>
  • $tag Der Hook für den wir die Funktion registrieren, z.B. wp_head
  • $function Deine Funktion, die die für den Hook registrierst.
  • $priority Eine Zahl, die aussagt, in welcher Reihenfolge die Funktion ausgeführt werden soll. Default ist 10. Je kleiner die Nummer, desto früher wird die Funktion ausgeführt.

Weitere Action-Hook Funktionen

do_action_ref_array

Funktioniert genau, wie do_action(), nur dass die Parameter/Argumente als array() eingefügt werden. Der Array ist ein erforderlicher Parameter. Ziel ist es dem Hook ein Objekt zu liefern, welches dann manipuliert werden kann.

remove_action

Du kannst auch Hooks entfernen, z.B. solche, die WordPress by Default hinzufügt (via add_action()), du aber nicht ausgeführt haben möchtest.
Die Syntax ist dieselbe wie bei add_action():

<?php

// Die Action-Hook Syntax um eine Funktion für einen Hook zu registrieren
remove_action( $tag, $function_to_remove, $priority, $accepted_args );

 ?>

Alle Argumente ($tag, $function_to_remove, $priority und $accepted_args) müssen exakt mit dem Hook übereinstimmen, um den Hook erfolgreich zu entfernen.

Sagen wir, du willst Actions aus dem wp_head Hook entfernen.

<?php

// Da keine Priorität angegeben ist, werden all Actions, egal welcher Priorität entfernt 
remove_action( 'wp_head' );

// Hier werden nur Actions der obersten Priorität entfernt
remove_action( 'wp_head', 1 );

 ?>

Da viele Instanzen deiner WordPress-Installation diese Hooks verwenden könnten, ist es nicht ungefährlich remove_hook() zu entfernen.

has_action

Wenn du herausfinden willst, ob ein bestimmter Hook eine Action registriert hast, kannst du has_action() verwenden.

<?php

// Gibt aus ob (boolean) eine oder mehrere Actions registriert sind
has_action( 'wp_head' );

// Gibt die Funktion (inkl. Prioriätat) aus, wenn sie registriert ist. Ansonsten false.
has_action( 'wp_head', 'function_to_check' );

 ?>

did_action

Wenn du herausfinden willst, ob zu einem bestimmten Zeitpunkt eine Action bereits ausgeführt wurde, verwende did_action().

<?php

// Gibt eine Zahl aus - die Anzahl wie oft die Action bereits ausgeführt wurde
did_action( 'wp_head' );

 ?>

Wichtige Action-Hooks

plugins_loaded
Der früheste Hook der von Plugin-Developern verwendet werden kann. Feuert, wenn alle aktivierten Plugins geladen sind.

init
Wird sehr viel von WordPress-Core genutzt. Feuert sobald WordPress vollständig geladen ist und somit angesprochen werden kann.

admin_menu
Feuert sobald das Admin-Interface geladen ist.

wp_head
Sobald der im Frontend gelangen ist und kann genutzt werden, um HTML in den Website-Head zu laden, z.B. Stylesheets.

Hooks finden

Es gibt viele Plugins, die dir visuell zeigen, welche Hooks für eine Seite registriert sind.
Ein einfacher, aber nicht unbedingt eleganter weg ist es, all Hooks anzusprechen und per var_dump() auszugeben. Dies sollte niemals auf einer Live-Website, sondern nur in der Entwicklungsumgebung ausgeführt werden.

<?php

// In functions.php
add_action( 'all', create_function( '', 'var_dump( current_filter());' ) );

 ?>

P.S. Wenn dir der Artikel gefallen hat, abonniere doch die wöchentlichen Tutorials auf YouTube, den E-Mail-Newsletter oder Beteilige dich an der Diskussion auf Facebook.

Kommentare