在我的主题功能中。php我试图添加一个带有参数的函数(如果可以的话,作为测试,而不是为了功能),但它根本不起作用。
即使我调用do\\u action并按照下面的建议将参数排入队列,参数也始终为空codex page.
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);
最合适的回答,由SO网友:cybmeta 整理而成
你用错了。
add_action
: 将函数附加到动作挂钩。在代码中,您正在附加alter_item
职能部门admin_menu
行动挂钩。那么,什么时候admin_menu
行动发生了,alter_item
函数被执行。According to codex, 没有参数传递给附加到的函数admin_menu
. 因此,您尝试在中使用的参数alter_item
无效。do_action
: 调用附加到动作挂钩的所有函数。在代码中,您正在调用附加到alter_item
行动挂钩。alter_item
动作挂钩将是一个自定义的动作挂钩,因为它不在WP核心中,但当前在您的代码中,此动作没有附加任何函数,因此您的do_action(\'alter_item\'...
.将功能附加到的正确方法admin_menu
是:
function alter_item() {
//Do whatever you want
}
//The priority argument (10 the code bellow) is optional.
add_action( \'admin_menu\', \'alter_item\', 10 );
定义自定义操作的正确方法:do_action(\'alter_item\', \'my-user\', \'plugins.php\', false);
然后可以将函数附加到alter_item
这样的动作: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
}
如果要将信息传递给核心操作,可以:为每个操作使用有效参数。请参阅每项行动的官方文件定义全局变量、使用选项、过渡集或自定义对象属性/方法,以便您可以在代码的不同位置使用这些信息。Example.使用PHP匿名函数use
关键字
示例使用
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;
}
} );