所以我找到了三个可行的解决方案,但我无法决定哪一个更好。你的意见是什么?
第一种解决方案:
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\';
}
我投票赞成第三种解决方案。
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\');
}
默认情况下,只有管理员和编辑器具有此功能,因此如果确定要使用默认值,那么检查此功能将告诉您需要了解的内容。