Jeder Theme- und Plug-in-Autor kennt bestimmt add_filter
und add_action
. Über diese Funktionen hängen wir uns in den WordPress-Kern und können ihn (fast) nach Belieben verändern. Im Hintergrund wird das System nun um die Klasse WP_Hook
bereichert. Es können weiterhin add_action
und add_filter
benutzt werden, die alle Arbeit schlichtweg an eine WP_Hook
-Instanz delegieren.
Event-driven: das Event-System
Das Ganze lehnt an eine Event-driven-Architektur an: Irgendwo im Kern passiert etwas, das den Event save_post
aktiviert und alle von uns eingehängten Funktionen darüber benachrichtigt. Auch eigene Aktionen und Filter können dort per do_action
und apply_filter
eingebracht werden. Hier ein Beispiel:
function mein_plugin_superhash( $text ) { $hash = sha1( str_rot13( strrev( $text ) ) ); return apply_filter( 'superhash', $hash, $text ); }
Der Superduper-Hash kann hier über den Filter superhash
von jedem anderen Plug-in noch kryptischer gestaltet werden. So werden eigene Filter geschaffen und vergleichbar per do_action
in eigene Actions umgewandelt.
Interne Actions und Filter
Jetzt möchten wir allerdings eigene Actions und Filter haben, in die sich keiner reinhängen soll. Interne Hooks sozusagen, die nicht über die beiden Funktionen erreichbar sind. Das ist eine Sache der Konvention und mithilfe der WP_Hook
-Klasse schnell gemacht:
$_my_own_events = array(); // Aufgabe hinzufügen function _my_own_add_task( $tag, $callable ) { global $_my_own_events; if ( ! isset( $_my_own_events[ $tag ] ) ) { // noch nicht registriert => neu erstellen $_my_own_events[ $tag ] = new WP_Hook(); } $_my_own_events[ $tag ]->add_filter( $tag, $callable, 10, 0 ); } // Aufgabe ausführen function _my_own_do( $tag, $args ) { global $_my_own_events; if ( ! isset( $_my_own_events[ $tag ] ) ) { // Gibt es nicht => zurücklehnen und nichts tun return false; } $_my_own_events[ $tag ]->do_action( $args ); }
Die beiden Funktionen _my_own_add_task
und _my_own_do
deuten mit dem führenden Unterstrich an, dass sie rein zur internen Verwendung gedacht sind. Für das eigene Plug-in ergibt sich dadurch ein Eventsystem, das völlig losgelöst von WordPress existieren kann:
$_my_own_events = array(); // Funktionen reinhängen _my_own_add_task( 'cat', 'purr_function' ); _my_own_add_task( 'cat', 'eat_function' ); // Hook ausführen _my_own_do( 'cat' );
WordPress Spezial
Alles rund um WordPress im Entwickler Spezial Vol. 10 – ab 18.11.2016 im Handel.
Genau wie Filter und Actions, nur in einer ganz eigenen Welt. Eine solche Spielerei ist sauber getrennt als eigener Event Broker denkbar; alternativ kann auch einfach ein normaler Filter mit führendem Unterstrich über den normalen Weg angelegt werden. Auch für die zuvor genannten Techniken und Beispiele gibt es Verbesserungen oder andere Möglichkeiten, die rückwärtskompatibel sind. Das ist immer so, dafür waren es auch nur Spielereien.
Mir als Entwickler machen solche Gedankenexperimente einfach Spaß. Am Ende war es eine Reise quer durch einige Neuerungen, die mit WordPress 4.7 kommen. Jetzt hoffe ich nur, dass nicht zu viele davon wieder revidiert werden und viele weitere Features noch hinzukommen.
Alles rund um WordPress 4.7

Alles zu WordPress 4.7

React Fiber, Neues aus dem IoT & neue Windows 10 Insider Preview Builds – unser Wochenrückblick KW 16

Angular 4, Alexa Skill & Windows 10 Mobile Insider Preview – unsere Top-Themen im Dezember

Wochenrückblick KW 46: Neue Windows 10 Insider Preview, Symfony 3.2 & User Stories

WordPress 4.7 – Event-System

WordPress 4.7 – Theme-Vererbung

WordPress 4.7 – Shortcodes

WordPress 4.7 – Bulk Actions

WordPress 4.7 – die Neuerungen

[…] PHPseit 2 Tagen online […]