第四步:修改新增/编辑用户时的角色下拉列表
第三步完成后基本整体就已经差不多了,注意,这里只是差不多,说明还有一些地方仍然需要修改,细心的你会发现在新增或者编辑用户的时候,其角色下拉列表以及用户列表中的下拉列表依然显示超级管理员和普通管理员,这意味无论是否超级管理员或者普通管理员,都可以将用户设置为超级管理员或者普通管理员,甚至取消超级管理/普通管理员的权限,这明显是不对的,所以依然要对这些地方进行修改,思路同之前一样:
超级管理员可以设置管理员和普通角色权限,或者取消管理员权限
普通管理员只能设置普通角色权限
主要还是通过$current_user来判断登录用户的权限来显示不同的数据
首先你需要打开你工程目录下的wp-admin/includes/user.php文件,找到function get_editable_roles()这个方法,代码如下:
function get_editable_roles() {
$all_roles = wp_roles()->roles;
/**
* Filters the list of editable roles.
*
* @since 2.8.0
*
* @param array $all_roles List of roles.
*/
$editable_roles = apply_filters( 'editable_roles', $all_roles );
return $editable_roles;
}
在$editable_roles = apply_filters( 'editable_roles', $all_roles );上面添加以下代码
global $current_user;
if( $current_user->roles[0] == 'administrator' ) {
unset($all_roles['administrator']);
}else{
unset($all_roles['administrator'],$all_roles['admin']);
}
然后下拉列表显示就基本完成了,同样的,我这里只是针对超级管理员和普通管理员进行对应修改,如果还需要对其他角色进行对应修改,例如不显示编辑这个角色,那么就在添加$all_roles['editor']即可,至于判断用户权限,可自行修改
//去掉这一角色的语法
unset($all_roles['角色标识']);
这里放上完整的代码
function get_editable_roles() {
$all_roles = wp_roles()->roles;
/**
* Filters the list of editable roles.
*
* @since 2.8.0
*
* @param array $all_roles List of roles.
*/
//设置管理员的权限:超级管理员可以设置普通管理员及以下权限,普通管理员仅能设置一般权限
global $current_user;
if( $current_user->roles[0] == 'administrator' ) {
unset($all_roles['administrator']);
}else{
unset($all_roles['administrator'],$all_roles['admin']);
}
$editable_roles = apply_filters( 'editable_roles', $all_roles );
return $editable_roles;
}
最终效果如下:
超级管理员:
普通管理员:
至此,超级管理员/普通管理员的设置以及管理后台用户列表的显示就全部修改完成