Lo estás usando mal.
-
add_action
: asocia una función a un gancho de acción. En su código, está adjuntando alter_item
funtion a admin_menu
action hook. Entonces, cuando ocurre la acción admin_menu
, se ejecuta la función alter_item
. De acuerdo con el códice , no se pasan parámetros a las funciones asociadas a admin_menu
. Por lo tanto, los parámetros que intenta utilizar en alter_item
no son válidos.
-
do_action
: invoca todas las funciones asociadas a un gancho de acción. En su código, está invocando todas las funciones vinculadas al gancho de acción alter_item
. El gancho de acción alter_item
sería un gancho de acción personalizado, ya que no está en el núcleo de WP, pero actualmente en su código no hay funciones adjuntas a esta acción, por lo que no ocurrirá nada con su do_action('alter_item'...
.
La forma correcta de adjuntar una función a admin_menu
es:
function alter_item() {
//Do whatever you want
}
//The priority argument (10 the code bellow) is optional.
add_action( 'admin_menu', 'alter_item', 10 );
La forma correcta de definir acciones personalizadas:
do_action('alter_item', 'my-user', 'plugins.php', false);
Luego puedes adjuntar funciones a alter_item
action como esta:
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 desea pasar información a acciones centrales, puede:
- use los parámetros válidos para cada acción. Consulte la documentación oficial de cada acción.
- defina variables globales, use las opciones, transiets u propiedades / métodos de objetos personalizados, para que pueda usar esa información en diferentes lugares de su código. Ejemplo .
- Use las funciones anónimas de PHP con la palabra clave
use
.
Ejemplo usando la palabra clave 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;
}
} );