Anonyme Funktionen für Actions und Filter

WordPress-Actions und -Filter erwarten als ersten Parameter die jeweilige Action bzw. den jeweiligen Filter, als zweiten Parameter den Namen der entsprechenden Funktion. Sofern man objektorientiert arbeitet, kann man als zweiten Parameter auch ein Array mit einer Klasse und einer Funktion angeben.

Die dritte Option besteht darin, anonyme Funktionen für Actions und Filter zu nutzen. Das bietet beispielsweise den Vorteil, dass man nicht mehr auf eindeutige Funktionsnamen achten muss – da die Funktionen anonym genutzt werden. Im Gegenzug entstehen dadurch aber auch ein paar Nachteile, die je nach Einsatzzweck jedoch nicht wirklich schwerwiegend sind. Später dazu mehr.

Der Vollständigkeit halber gibt es bei Filtern noch eine vierte Option für den zweiten Parameter, das sind WordPress-Hilffsfunktionen wie:

  • __return_true()
  • __return_false()
  • __return_null()
  • __return_zero()
  • __return_empty_array()
  • __return_empty_string()

Dazu gehe ich in diesem Blog-Beitrag jedoch nicht näher ein. Zurück zu den anonymen Funktionen, zunächst bei Actions.

Actions

Statt Code in dieser Form zu nutzen:

add_action('my_hook', 'do_something');
function do_something($value)
{
    return $value;
}

Kann man auch folgenden Code mit einer anonymen Funktion nutzen:

add_action('my_hook', function ($value) {
    return $value;
});

Diese Variante ist einfacher zu warten, es entstehen jedoch zwei Nachteile:

  • Eine Action kann mit remove_action() nicht wieder entfernt werden, wenn sie eine anonyme Funktion nutzt.
  • Anonyme Funktionen lassen sich nicht wiederverwenden. Benötigt man den gleichen Code für mehrere Actions, dann sollte man auf den „regulären“ Weg zurückgreifen, um den Funktionscode wiederverwenden zu können.

Filter

Das Gleiche gilt für Filter, statt folgendem Code:

add_filter('my_filter', 'do_something');
function do_something($value)
{
    return $value;
}

Kann man den Code unter Zuhilfenahme einer anonymen Funktion wie folgt umschreiben:

add_filter('my_filter', function ($value) {
    return $value;
});

Auch hier gelten die gleichen Nachteile wie bei den Actions. Aber wie bereits beschrieben sind die Nachteile, je nach Einsatzzweck, nicht wirklich schwerwiegend.

Schreibe einen Kommentar