Читать книгу Entwicklung von WordPress-Plugins - Onno Gabriel - Страница 7
Actions
ОглавлениеUm eine eigene Funktion an einen Hook zu hängen, d.h. sie durch WordPress zum Zeitpunkt des Hook-Auslösers aufrufen zu lassen, wird die Funktion add_action()
verwendet:
add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )
Die Funktion wird mit bis zu vier Argumenten aufgerufen:
$tag ist der Name des Action-Hooks (erforderlich).
$function_to_add ist der Name der Funktion, die aufgerufen werden soll (erforderlich).
$priority legt die Priorität des Funktionsaufrufes fest (optional; Standardwert ist 10). Sind mehrere Funktionen mit dem gleichen Hook verbunden, werden diese in der Reihenfolge ihrer Priorität aufgerufen.
$accepted_args ist die (optionale) Zahl der Argumente, die bei dem Funktionsaufruf übergeben werden.
Um beispielsweise die eigene Funktion my_plugin_init()
zum Zeitpunkt des init
-Hooks ausführen lassen, reicht folgende add_action()
-Anweisung:
<?php // Funktion definieren function my_plugin_init() { // ... eigener Code ... } // Funktion an den Hook "init" hängen add_action( 'init', 'my_plugin_init' ); ?>
Zudem ist es möglich, eigene Hooks in Plugins und Themes zu definieren. Das ist beispielsweise auch sinnvoll, wenn in einem Plugin Möglichkeiten für andere Plugins zum Ausführen von Zusatzfunktionen geschaffen werden sollen.
Tatsächlich beruht der Erfolg vieler der am weitesten verbreiteten Plugins wie zum Beispiel WooCommerce oder auch BuddyPress unter anderem auf deren einfachen Erweiterbarkeit mittels Hooks. Denn erst mit den Hooks können sich weitere Plugins von Drittanbietern in diese Plugins „einhaken“ und auf diese Weise Zusatzfunktionen anbieten.
Ein eigener Hook wird über die Funktion do_action()
erstellt:
do_action( string $tag, $arg = '' )
Hier ist $tag
der erforderliche Name des Hooks und $arg
ein optionales Array aus Argumenten, die einer aufzurufenden Funktion übergeben werden. Sobald WordPress die Stelle mit einem do_action()
-Aufruf erreicht, werden alle mit diesem Hook verbundenen Funktionen aufgerufen.
Zum Beispiel könnte an das Ende einer Funktion, über die ein Artikel in einen Warenkorb gelegt wird, ein Hook mit Namen artikel_hinzugefuegt
eingefügt werden, der als einzelnes Argument die Variable mit dem hinein gelegten Artikel übergibt:
<?php function artikel_in_warenkorb( $artikel = array() ) { // ... Code für den Warenkorb ... // Hook für andere Funktionen erzeugen und diesen // als Argument $artikel übergeben do_action( 'artikel_hinzugefuegt', $artikel ); } ?>
Dieser neue Hook kann dann durch beliebige andere Plugins oder Themes genutzt werden, indem diese eigene Funktionen mit dem Hook verbinden. Zum Beispiel:
<?php // Eigene Funktion definieren function meine_plugin_funktion( $artikel = array() ) { // ... eigener Code ... } // Eigene Funktion an den Hook 'artikel_hinzugefuegt' // hängen, die Priorität auf 10 und die Anzahl der // Argumente auf 1 setzen: add_action( 'artikel_hinzugefuegt', 'meine_plugin_funktion', 10, 1 ); ?>