Ein Blog über Code, Hardware und Co

Wordpress und Webentwicklung

WordPress Hooks, Actions und Filter

Was sie sind, wie sie funktionieren und wie man sie verwendet.

Jeder, der mit Webentwicklung zutun hat, dem laufen früher oder später sog. “Hooks” über den Weg. Wer sich eingehend mit WordPress beschäftigt, der wird auch um sog. Actions und Filter nicht herumkommen. Der folgende Artikel erklärt, was Hooks, Actions und Filter eigentlich sind – und wieso sie ein so tolles Konzept darstellen.

Die Definition: Was sind Hooks, Actions und Filter?

Hooks sind der terminologische Oberbegriff, Actions und Filter sind eigentlich nichts anderes als spezifische Hooks in WordPress. Mit Actions und Filtern hat

Definition
HookEin “Hook” (zu deutsch “Haken”) ist genau das: Ein Haken im Code. Diese Hooks sind optimalerweise überall im Code verteilt und wie als Webentwickler können uns an diese “Haken” hängen und eigenen Code einschleusen.
Hooks sind also Einstiegspunkte im Code einer Anwendung, die an bestimmten Stellen die Ausführung eigenen Codes erlauben.
ActionEin Action-Hook ist ein Hook, der dann ausgeführt wird, wenn ein bestimmtes Ereignis (“Event”) in WordPress auftritt. Beispielsweise, wenn alle Plugins geladen sind, ein Formular abgeschickt wird, oder die Site komplett geladen hat.
FilterEin Filter-Hook ist ein Hook, der an bestimmten Stellen im Code die Manipulation von Daten ermöglicht. Filter-Hooks kommen z.B. zum Einsatz um Datensätze anzupassen, bevor sie auf der Webseite angezeigt werden, oder in die Datenbank geschrieben werden.
Tabelle 1: Hooks, Actions und Filter – Definitionen.

Was ist der große Vorteil?

Der große Vorteil – der vermutlich auch einen großen Anteil am Erfolg und der Verbreitung des WordPress-CMS hat, ist, dass Actions und Filter eine nahezu unbegrenzte Erweiterbarkeit und Individualisierbarkeit gewährleisten ohne gleichzeitig die Wartbarkeit infrage zu stellen.

Es muss nicht der eigentliche Programmcode angefasst werden, sondern der Entwickler “hängt” seinen zusätzlichen Code an den jeweiligen Haken (Hook). Dadurch sind auch Updates des ursprünglichen Programmcodes, z.B. des WordPress-Cores oder eines Plugins kein Problem, da eigene Individualisierungen, die per Hook “angehängt” sind, nicht überschrieben werden.

Neben standardmäßig in WordPress integrierte Hooks, gibt es auch die Möglichkeit eigene Hooks – also Actions und Filter – zu erstellen. So können auch Erweiterungen immer weiter erweitert werden.

Dank Actions und Filtern gibt es abertausende Plugins und Themes für WordPress und sogar Plugins für Plugins.

Aber schauen wir uns die Funktionalität und Anwendung nun einmal genauer an.

WordPress Actions

Was sind Actions? Wofür nutzt man sie?

Actions werden ausgeführt, wenn ein Event in WordPress stattfindet. Wir können so bei entsprechenden Events eigenen Code ausführen. 

Ein Beispiel wäre z.B. das Ausführen eigenen Codes, nachdem alle Plugins geladen worden sind, oder nachdem die Webseite fertig geladen ist.

Die zwei Funktionen um Action-Hooks zu nutzen

add_action() – um sich an einen bestehenden Action-Hook einzuhängen.

do_action() – um einen eigenen Action-Hook zu erstellen

So verwendest du “add_action()”

Die Funktion ist wie folgt aufgebaut:

add_action('action_hook', 'my_own_function');

Der erste Parameter gibt dabei den Einsteigspunkt an, bzw. die Action, bei der der Code ausgeführt werden soll. Der Zweite Paramater ist unsere eigene Funktion, die dann ausgeführt werden soll.

Beispiel einer Action Hook: Ausgabe, wenn ein Posting gespeichert wird

Angenommen, wir wollen nun nach dem Speichern eines Beitrages eine Ausgabe erzeugen, die den Speichervorgang bestätigt.
Dafür hängen wir uns an das in WordPress existierende Event “save_post”. Die Funktion, die die Meldung erstellt, nennen wir “my_own_function”.

Der Action-Hook sieht dann wie folgt aus:

add_action('save_post','my_own_function');

Der Inhalt von “my_own_function” könnte dann wie folgt aussehen:

function my_own_function(){
  //executed when a post has been saved
  echo "<script>alert('Post wurde gespeichert')</script>";
}

Das Ergebnis ist, dass nach jedem Speichern eines Beitrags nun ein Alert erscheint “Posting gespeichert”.

Actions können Parameter übergeben

Einige Actions übergeben Parameter, die wir in unserer Funktion nutzen können. Im Beispiel “save_post” wäre das z.B. die “$post_id”.
Diesen Wert können wir in unserer Funktion weiter verwenden:

function my_own_function($post_id){
  //executed when a post has been saved
  echo "<script>alert('Post wurde gespeichert')</script>";
  //Titel des Beitrags anhand der übergebenen ID holen
  $post_titel = get_the_title($post_id);
}

Tipp: Eine Liste von Action-Hooks, die im WordPress-Core von Haus aus existieren und an die man sich anhängen kann, findest du hier.

So verwendest du “do_action()”

Mit Hilfe von “do_action()” können wir einen eigenen Action Hook erstellen. Die Verwendung ist dabei sehr intuitiv und kinderleicht.

Wir rufen die Funktion “do_action()” auf und übergeben einen beliebigen Namen für den Hook:

do_action("mein_eigener_hook");

Wir können hier ebenfalls definieren, dass wir Parameter übergeben, die der bei der Hook ausgeführte Code dann weiterverarbeiten kann:

do_action("mein_eigener_hook", $parameter1, $parameter2);

Wir können überall in unserem Code solche Action-Hooks erstellen, an die wir – oder andere Entwickler – sich später mittels “add_action()” anhängen können. Wir machen unseren Code so ebenfalls updatesicher und erweiterbar.

In unserem Beispiel ginge das mit:

add_action('mein_eigener_hook','my_own_function');

my_own_function(){
//Dein eigener Code
}

Lohnenswertes Tutorial für WordPress Actions im Video

WordPress Filter

Was sind Filter? Wofür nutzt man sie?

Filter erlauben uns das Modifizieren von Daten, bevor sie weiterverarbeitet werden.

Ein Beispiel wäre z.B. das Modifizieren eines Datensatzes bevor er auf der Webseite angezeigt, oder in der Datenbank gespeichert wird.

Die zwei Funktionen um Filter-Hooks zu verwenden

add_filter() – um einen Bestehenden Filter zu nutzen bzw. sich dort einzuhängen.

apply_filters() – um einen eigenen Filterpunkt zu definieren, an dem Daten modifiziert werden können.

So verwendest du “add_filter()”

Filter verhalten sich sehr Ähnlich wie Actions. Um sich an einen Filterpunkt anzuhängen, gehen wir wie folgt vor:

add_filter('name_des_filters','my_own_function');

Der “name_des_filters” ist dabei der bereits im WordPress-Core vorhandene (oder zuvor selbst definierte) Einstiegspunkt im Code.

“my_own_function” ist die Funktion, die ausgeführt wird. Wichtig ist hierbei, dass die Funktion bei einem Filter in jedem Falle Daten über einen Parameter übergeben bekommt.

function my_own_function($parameter1){
//Meine eigene Funktion, die Daten erhält, diese verändert und anschließend zurück gibt.

return $parameter1;
}

Achtung: Eine sinnvolle Filterfunktion gibt die ihr übergebenen Daten nach Ausführung auch zurück. Dafür steht wie gewohnt “return” zur Verfügung.

Ein Beispiel aus der Praxis: Veränderung der Länge der Beitragsvorschau.
//Zunächst den Filter registrieren/hinzufügen
add_filter('excerpt_length', 'new_excerpt_lenght');

//Eigene Funktion, die Parameter übergeben bekommt (Beitragsvorschaulänge) und wieder zurück gibt.
function new_excerpt_lenght($length){

$length = 25;

return $length;
}

Im obigen Beispiel ändern wir die Länge der Beitragsvorschau auf 25 Zeichen.

Die Priorität von Filtern

Filter können mit einer Priorität versehen werden, die die Reihenfolge der Abarbeitung betrifft. Wir erinnern uns: Jedem Filter-Hook (apply_filter()) können mehrere Filter angehängt werden (add_filter()). Die Priorität wird beim Anhängen einer Funktion mit übergeben:

// Dieser Filter hat die Priorität 13
add_filter('name_des_filters','my_own_function', 13);

Dieser Filter hat die Priorität 13.

add_filter() mit mehreren Parametern

Es gibt durchaus Fälle, in denen einem Filter mehrere Parameter übergeben werden. Wir können beim Anhängen eines Filters an einen Filter-Hook ebenfalls übergeben, wie viele Parameter der Filter akzeptiert:

// Dieser Filter akzeptiert 2 Parameter
// Dieser Filter hat die Priorität 13
add_filter('name_des_filters','my_own_function', 13, 2);

So verwendest du “apply_filters()”

Um anderen Entwicklern die Möglichkeit zu geben, die Daten, die wir verarbeiten, zu nutzen und zu verändern, können wir eigene Filter in unseren Code einbauen.

Das geht mit “apply_filters()”.

Ein möglicher neuer Filter sieht dann wie folgt aus:

apply_filters('name_des_filters', $data);

Tipp: Eine Liste von Filter-Hooks, an die man sich im WordPress-Core anhängen kann, findest du hier.

Ein Lohnenswertes Tutorial über die Verwendung von Filter-Hooks im Video

Was ist der Unterschied zwischen Action und Filter?

Eine häufig gestellte Frage ist nun, WAS ist eigentlich der Unterschied zwischen Actions und Filtern?

Technisch ist der Unterschied marginal, im Prinzip ist die Funktionalität identisch.
ABER:

Eine Action erhält optional einen Parameter übergeben. Ein Filter erhält IMMER einen Parameter übergeben.

Wieso? Filter sind dazu da, Daten zu erhalten, zu verändern und dann an den eigentlichen “Hauptcode/Hauptprozess” zurückzugeben. Daher werden immer Daten als Parameter übergeben – und sollten auch tunlichst mittels “return” zurückgegeben werden.

Fazit: Nahezu unbegrenzte Flexibilität dank Actions und Filter

Ich liebe das Prinzip von Hooks und die Umsetzung durch Action-Hooks und Filter-Hooks in WordPress. Da an jeden Hook unbegrenzt viel Code angehängt werden kann, ist eine nahezu unbegrenzte Erweiterbarkeit gegeben. Ich denke man kann durchaus sagen, dass die dadurch gewonnene Flexibilität und Erweiterbarkeit bei gleichzeitiger Wartbarkeit maßgeblich zum Erfolg des WordPress-CMS beigetragen hat.

Schreibe eine Antwort