为非管理员和非编辑者隐藏顶级管理面板

时间:2017-12-25 作者:DoktorD96

所以我找到了三个可行的解决方案,但我无法决定哪一个更好。你的意见是什么?

第一种解决方案:

if ( ( in_array(\'administrator\', userdata(\'role\')) || in_array(\'editor\', 
userdata(\'role\')) ) == false)
{   
add_filter(\'show_admin_bar\', \'__return_false\');
}
第二个:

if( ( current_user_can(\'editor\') || current_user_can(\'administrator\') ) == false )
{
add_filter(\'show_admin_bar\', \'__return_false\');
}
第三个:

$allowed_roles = array(\'editor\', \'administrator\');
if( array_intersect($allowed_roles, userdata(\'role\') ) == false ) {
add_filter(\'show_admin_bar\', \'__return_false\');
} 
用户数据功能:

function userdata($userdata){
$userinfo = wp_get_current_user();
if ($userdata == \'nick\')
return $userinfo ->user_login;
if ($userdata == \'mail\')
return $userinfo ->user_email;
if ($userdata == \'id\')
return $userinfo ->ID;
if ($userdata == \'role\')
return $userinfo ->roles;
else
return \'Eror\';
}
我投票赞成第三种解决方案。

2 个回复
SO网友:Serkan Algur

这就是我正在使用的;

add_action(\'init\', \'blockusers_init\');

function blockusers_init() {
    if (is_admin() && !current_user_can(\'administrator\') &&
        !(defined(\'DOING_AJAX\') && DOING_AJAX)) {
        wp_redirect(home_url());
        exit;
    }
}
这可能是最好的。

编辑:您需要一个自定义登录页才能访问wp-admin. 如果您直接输入到,则此代码重定向到主页wp-admin.

SO网友:inarilo

第一种方法效率低下,因为它运行userdata 功能两次,但很容易修复:

$roles = userdata(\'role\');
if ( ( in_array(\'administrator\', $roles) || in_array(\'editor\', $roles) ) == false )
{   
    add_filter(\'show_admin_bar\', \'__return_false\');
}
然而,第三种方法在本质上以更好的方式做同样的事情。

第二种方法使用current_user_can, 根据documentation.

但是,如果您确定不同角色现在或将来将具有的功能,您可以这样做:

if( !current_user_can(\'edit_others_posts\') )
{
    add_filter(\'show_admin_bar\', \'__return_false\');
}
默认情况下,只有管理员和编辑器具有此功能,因此如果确定要使用默认值,那么检查此功能将告诉您需要了解的内容。

结束

相关推荐

WP-Admin显示(1)更新,但没有更新插件、主题或WordPress

我有一个奇怪的问题,在我的wp管理,它说有一个更新需要。然而,我检查了主题、插件,甚至重新安装了最新版本的Wordpress,它仍在向我显示更新。我还删除了我的缓存插件,并做了各种其他任务试图修复它,但没有运气。有人知道是什么原因导致了这一问题,以及/或者我如何解决这一问题吗?这很烦人。谢谢你的帮助。以下是两张图片: