it-swarm.com.de

Versuch, add_action und do_action mit Parametern zu verwenden

In meiner themes functions.php versuche ich eine Funktion mit Parametern hinzuzufügen (als Test, ob dies funktioniert, nicht für die Funktionalität) und es funktioniert einfach nicht.

Die Parameter kommen immer leer an, auch wenn ich do_action mit den Parametern in der Warteschlange aufrufe, wie in dieser Codexseite vorgeschlagen.

function alter_item ($user, $items, $action) {
    global $current_user, $menu;
    get_currentuserinfo();

    switch ($action) {
        case false:
            if ($current_user->user_login == $user) {
                remove_menu_page ($items);
            }
        break;

        case true:
            if ($current_user->user_login == $user) {
                remove_menu_page ($items);
            }
        break;
    }
}

add_action( 'admin_menu', 'alter_item', 10, 3 );
do_action('alter_item', 'my-user', 'plugins.php', false);
6
mebu83

Sie verwenden es falsch.

  • add_action: Hängt eine Funktion an einen Aktions-Hook an. In Ihrem Code hängen Sie die Funktion alter_item an den Aktions-Hook admin_menu an. Wenn also eine admin_menu-Aktion stattfindet, wird die alter_item-Funktion ausgeführt. Laut Codex werden keine Parameter an Funktionen übergeben, die an admin_menu angehängt sind. Die Parameter, die Sie in alter_item verwenden möchten, sind daher ungültig.

  • do_action: ruft alle Funktionen auf, die an einen Aktions-Hook angehängt sind. In Ihrem Code rufen Sie alle Funktionen auf, die an den Aktions-Hook alter_item angehängt sind. Der Aktions-Hook alter_item ist ein benutzerdefinierter Aktions-Hook, da er sich nicht im WP Core befindet. Derzeit sind in Ihrem Code dieser Aktion jedoch keine Funktionen zugeordnet, sodass mit Ihrem do_action('alter_item'... nichts passiert.

Der richtige Weg, eine Funktion an admin_menu anzuhängen, ist:

function alter_item() {
    //Do whatever you want
}
//The priority argument (10 the code bellow) is optional.
add_action( 'admin_menu', 'alter_item', 10 );

So definieren Sie benutzerdefinierte Aktionen richtig:

do_action('alter_item', 'my-user', 'plugins.php', false);

Dann können Sie der alter_item-Aktion folgende Funktionen hinzufügen:

add_action( 'alter_item', 'alter_item_attached_function', 10, 3 );

function alter_item_attached_function( $user, $items, $action ) {
     //Now $user, $items and $action will be 'my-user', 'plugins.php' and false
}

Wenn Sie Informationen an Hauptaktionen übergeben möchten, können Sie:

Beispiel mit dem Schlüsselwort use:

$user = 'my-user';
$items = 'plugins.php';
$action = false;

add_action( 'admin_menu', function() use ($user, $items, $action) {
    global $current_user, $menu;
    get_currentuserinfo();
    switch ($action) {
        case false:
            if ($current_user->user_login == $user) {
                remove_menu_page ($items);
            }
        break;

        case true:
            if ($current_user->user_login == $user) {
                remove_menu_page ($items);
            }
        break;
    }
} );
8
cybmeta