Remove Menu Page Giving Error

时间:2013-02-27 作者:AndyWarren

我在函数中编写了一段代码。php文件,如果用户无法激活插件,只需删除菜单页。按预期工作;但是,只有当登录用户是管理员时,才会在管理区域显示PHP错误。

下面是代码片段:

<?php
/************ Remove admin menu items from anyone who isn\'t an admin ************/

if (!current_user_can(\'activate_plugins\') ) { 
    function my_remove_menu_pages() {
        remove_menu_page(\'link-manager.php\');
        remove_menu_page(\'tools.php\');
        remove_menu_page(\'edit-comments.php\');
    }
};

add_action( \'admin_menu\', \'my_remove_menu_pages\' );
?>
错误如下:

Warning: call_user_func_array() expects parameter 1 to be a valid callback, function \'my_remove_menu_pages\' not found or invalid function name in /var/www/vhosts/mydomain.com/httpdocs/wp-includes/plugin.php on line 406
我尝试过用几种不同的方式重写这个片段,每次都是一样的。按预期工作,删除管理员以下的管理员菜单页,但以管理员身份登录时,WP后端会出现相同的错误。对此有何建议或想法?

2 个回复
最合适的回答,由SO网友:Mike Madern 整理而成

add_action 中的行if (!current_user_can(\'activate_plugins\') ) {:

<?php
/************ Remove admin menu items from anyone who isn\'t an admin ************/

if (!current_user_can(\'activate_plugins\') ) { 
    function my_remove_menu_pages() {
        remove_menu_page(\'link-manager.php\');
        remove_menu_page(\'tools.php\');
        remove_menu_page(\'edit-comments.php\');
    }

    add_action( \'admin_menu\', \'my_remove_menu_pages\' );
};
?>

SO网友:s_ha_dum

只有当用户无法“激活插件”,但您一直试图使用该功能时,您才可以定义您的功能。你最好按照Mike Madern在评论中的建议做:

if (!current_user_can(\'activate_plugins\') ) { 
    function my_remove_menu_pages() {
        remove_menu_page(\'link-manager.php\');
        remove_menu_page(\'tools.php\');
        remove_menu_page(\'edit-comments.php\');
    }

    add_action( \'admin_menu\', \'my_remove_menu_pages\' );
}
或者这个:

function my_remove_menu_pages() {
    remove_menu_page(\'link-manager.php\');
    remove_menu_page(\'tools.php\');
    remove_menu_page(\'edit-comments.php\');
}

if (!current_user_can(\'activate_plugins\') ) { 
    add_action( \'admin_menu\', \'my_remove_menu_pages\' );
}
这应该可以消除Warning. 尽管如此,我仍然对此感到担忧。您应该能够通过操纵用户角色和功能来显示和隐藏各种页面。这就是我建议您这样做的方式,而不仅仅是强行删除管理页面。那样你可能会给自己带来一些麻烦。您需要一个插件来对用户功能进行任何详细的操作,或者为其编写自己的代码。

结束

相关推荐

Functions.php Problem

当我在函数顶部添加第3-19行时。php,然后尝试更新图像。phpI get the error \"Warning: Cannot modify header information - headers already sent\" when I try to update my image.php.第3-19行的代码为“我的图像库”创建自定义的下一个/上一个链接,并将最后一个链接重定向到“更多库”页面。我的代码可以在这里看到:http://pastebin.com/Yen04t2z