WordPress Hooks – Action-Hooks
Action Hooks im WordPress Development: 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 ein 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 Website-Head im Frontend gelangen ist und kann genutzt werden, um HTML in den Website-Head zu laden, z.B. Stylesheets.
template_redirect
Feuert before die Template-Dateien geladen werden, die für eine bestimmte Frontend-Seite (z.B. die Post-Archive-Seite) benötigt werden. Er ist der hilfreich, wenn man z.B. bestimmte Styles oder Scripts nur für bestimmte Templates/Views laden will.
In diesem Beispiel registrieren wir ein Stylesheet nur für die Post-Archive-Seite:
<?php // Spreche den Action-Hook an und registriere deine Custom-Function für ihn add_action( 'template_redirect', 'register_styles_for_post_archive' ); // Deine Funktion, die das Stylesheet nur lädt, wenn es sich um die Post-Archive-Seite handelt function register_styles_for_post_archive() { // Post-Type als Parameter oder leer lassen, für aktuelles Post-Type if ( is_post_type_archive( $post_types ) ) { wp_enqueue_style('your-custom-stylesheet-name', 'your-css-file.css', false, 01, 'screen'); } } ?>
Action Hooks finden
Es gibt viele Plugins, die visuell zeigen, welche Action Hooks im WordPress Development 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());' ) ); ?>
Dieser Artikel wird präsentiert von der WordPress Agentur Berlin – beawwwer.com.
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.
Die wichtigsten Git commands im Überblick
Most important Git commands Set User git config –global user.name... Programmieren lernen
Was ist Headless WordPress?
Was bedeutet der Begriff Headless WordPress? Wenn wir über Headless... Programmieren lernen
Filter Hooks im WordPress Development
Filter Hooks im WordPress Development verwenden Was sind WordPress Filter... Programmieren lernen
Kommentare