Dans mes thèmes functions.php, j'essaie d'ajouter une fonction avec des paramètres (comme test si cela fonctionne, pas pour la fonctionnalité) et cela ne fonctionne tout simplement pas.
Les paramètres arrivent toujours vides même si j'appelle do_action avec les paramètres mis en file d'attente comme suggéré dans cette page de codex .
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);
Vous l'utilisez mal.
add_action
: attache une fonction à un hook d’action. Dans votre code, vous attachez la fonction alter_item
au __ hook action admin_menu
. Ainsi, lorsque l’action admin_menu
se produit, la fonction alter_item
est exécutée. Selon codex , aucun paramètre n'est transmis aux fonctions attachées à admin_menu
. Ainsi, les paramètres que vous essayez d'utiliser dans alter_item
ne sont pas valides.
do_action
: appelle toutes les fonctions attachées à un hook d’action. Dans votre code, vous appelez toutes les fonctions attachées au hook d'action alter_item
. Le crochet d'action alter_item
serait un crochet d'action personnalisé, car ce n'est pas dans le noyau WP, mais actuellement dans votre code, aucune fonction n'est attachée à cette action, donc rien ne se passera avec votre do_action('alter_item'...
.
La manière correcte d'attacher une fonction à admin_menu
est la suivante:
function alter_item() {
//Do whatever you want
}
//The priority argument (10 the code bellow) is optional.
add_action( 'admin_menu', 'alter_item', 10 );
La manière correcte de définir des actions personnalisées:
do_action('alter_item', 'my-user', 'plugins.php', false);
Ensuite, vous pouvez attacher des fonctions à l'action alter_item
comme ceci:
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
}
Si vous souhaitez transmettre des informations aux actions principales, vous pouvez:
use
.Exemple d'utilisation du mot clé 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;
}
} );