WordPress: add_action() und add_filter() mit Parametern benutzen
14.08.2012 in: PHP, Webdesign und WordPress
Die Funktionen add_action()
und add_filter()
arbeiten relativ statisch: Wir können ihnen den Hook nennen, die Callback-Funktion, die Priorität und die Zahl der zu übergebenden Argumente. Nicht schlecht, aber auch nicht gut genug. Was zunächst nicht geht: dynamische Parameter mitgeben.
Ab PHP 5.3 können wir Closures benutzen, auch anonyme Funktionen genannt. Sie funktionieren ähnlich wie in JavaScript – mit einem Unterschied: Der Variablen-Scope erbt nicht automatisch den des Parents. Dazu brauchen wir use()
.
Stecken wir das alles zusammen:
$param1 ='<p>This works!</p>'
; $param2 ='This works too!'
; add_action('wp_footer'
, function() use ( $param1 ) { echo $param1; }, 11 ); add_filter('the_content'
, function( $content ) use ( $param2 ) { return t5_param_test( $content, $param2 ); }, 12 ); /** * Add a string to post content * * @param string $content * @param string $string This is $param2 in our example. * @return string */ function t5_param_test( $content, $string ) { return"$content <p><b>$string</b></p>"
; }
Wie bei allem, das Spaß macht, gibt es ein Aber. Naja, sogar zwei: WordPress verlangt derzeit noch PHP 5.2, auf einigen Systemen mit so alten Versionen wird das also nicht funktionieren.
Und es ist relativ schwierig, so etwas mit remove_action()
oder remove_filter()
zu entfernen.
Wer alte PHP-Versionen unterstützen möchte, kann die Klasse WPSE_Filter_Storage
benutzen, die ich mal auf WordPress Stack Exchange veröffentlicht habe.