Was ist eigentlich ein Hook?

Dieser Artikel ist ursprünglich am 09. 07. 2012 erschienen.
Das ist eine ganze Weile her. Der Inhalt ist wahrscheinlich nicht mehr aktuell.

Wenn man mit WordPress-Themes und PlugIns arbeitet, begegnet man man früher oder später dem Stichwort „Hook“. Was verbirgt sich dahinter und was kann man damit tun?

Über einen Hook kann man eigene Funktionen an einer definierten Stelle im WordPress-Code „einhaken“. Baut man seine Erweiterungen an diesen Punkten ein, dann überstehen die Modifikationen das nächste Update ohne Schaden.
Die Hook-Funktionen werden in die functions.php-Datei im Theme-Ordner eingetragen oder gleich in ein PlugIn gepackt, das im Verzeichnis PlugIns wohnt. Dort sind sie separat vom WordPress-Core-Code gespeichert.

Die Alternative wäre, direkt im WordPress-Code herumzubasteln. Das empfiehlt sich aber ganz und gar nicht, denn beim nächsten Update wäre die ganze Arbeit futsch.

Zwei Prinzipien: Actions und Filters

Es gibt zwei Arten von Hooks: Actions und Filters.
Was ist der Unterschied zwischen Actions und Filters? Fragt man fünf Entwickler, bekommt man zehn Antworten. Nicht selten hört man sogar die Meinung, das sei eigentlich alles irgendwie dasselbe.

Das stimmt nicht so ganz. Actions und Filters machen zwar ähnliche Dinge, aber der Kontext, in dem sie das tun, ist durchaus verschieden.

A. Actions

Die Andockstellen für Action-Hooks sind alle Punkte, an denen die Entwickler vom WordPress Core ein do_action(); oder ein do_actions_ref_array(); platziert haben.

Ein klassisches Beispiel ist der Hook wp_head. 

function wp_head(){
do_action ('wp_head');
}

Dieser Hook markiert die Stelle, die man ansprechen muss, wenn man etwas im head-Bereich des HTML-Codes platzieren möchte. Mit dieser Funktion würde man beispielsweise eine Meta-Description in den head-Bereich hineinschreiben:

add_action( 'wp_head', 'mein_actionhook' );
function mein_actionhook() {
echo '<meta name="description" content="Hallo, Leute!" />' . "\n";
}

Das Prinzip der Actions

Hinter einem Action-Hook steht das, was der Name schon sagt: Eine Aktion. An einer bestimmten Stelle oder zu einem bestimmten Zeitpunkt soll etwas passieren.
Eine Zeile HTML soll in den <head>-Bereich geschrieben werden oder WordPress soll jedes Mal eine E-Mail versenden, wenn ein neuer Post erschienen ist.

B. Filter

Ein Filter-Hook macht etwas anderes. Ihr habt es bestimmt schon erraten: Er filtert etwas.
Die Andockstellen für Filter-Hooks sind die Stellen, an denen die Entwickler ein vom WordPress Core ein apply_filters(); oder ein apply_filters_ref_array(); platziert haben.

Das Prinzip der Filter

Beim Filtern von Informationen arbeitet man mit Material, das schon da ist. Man erzeugt also nichts Neues, sondern arbeitet mit bereits vorhandenen Informationen. Der Filter tut seine Arbeit quasi als Mittelsmann: Er verändert die Daten bevor sie im Browser ausgegeben werden oder er analysiert und filtert sie, bevor sie in der Datenbank gespeichert werden.
Ein Filter gibt in der Regel einen Wert zurück, der das Ergebnis seiner Arbeit enthält.

Ein Beispiel für einen Filter aus dem praktischen WordPress-Alltag wäre so etwas:

function remove_footer_admin () {
	echo 'Eingerichtet 2012 von Kirsten';
}
add_filter('admin_footer_text', 'remove_footer_admin');

Diese Funktion ersetzt den Standard-Footer im WordPress-Backend.


Einen schönen Artikel (englisch) zum Thema Filters und Actions gibt es bei tipsandtricks-hq.com.
Und hier ist noch ein Link zu einer sehr aufschlussreichen Diskussion (englisch) im WordPress-Support -Forum.
Eine Liste aller WordPress-Hooks hat Adam R Brown zusammengetragen.