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

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.

Kommentare