尝试将ADD_ACTION和DO_ACTION与参数一起使用

时间:2015-01-15 作者:wxT3APyGfkYJVK

在我的主题功能中。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);

1 个回复
最合适的回答,由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.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;
    }
} );

结束

相关推荐

Adding custom Bulk Actions

我一直在寻找将自定义批量操作添加到类别页面的方法。他们中的大多数人说,不可能用干净的方式来做这件事,因为这件事没有挂钩。大多数解决方案包括在客户端使用JS通过DOM操作添加选项。虽然这是可行的,但它仍然是一个相当丑陋的解决方案。我读过的大多数文章都是2年前的,所以我一直在想,从那时起到现在,这个问题已经添加了一个新的挂钩或解决方案,以便对这个问题有一个更及时的解决方案。