一个步骤是使用editable_roles
筛选以从下拉列表中删除角色,但这不会阻止用户修改选择值并创建具有“不允许”角色的用户。
是的,的确如此。此过滤器不仅仅用于下拉列表。修改editable_roles
实际上阻止用户分配不允许的角色。
这是因为edit_user()
(用于添加新用户的函数)调用get_editable_roles()
当不允许用户扮演该角色时,也会退出。
下面是一个简单的示例,说明您可以做什么:
/**
* Removes Administrator from roles list if user isn\'t an admin themselves.
*
* This way, only admins can make new admins.
*
* @param array $all_roles List of roles.
* @return array Modified list of roles.
*/
function wpse_293133_filter_editable_roles( $all_roles ) {
if ( ! is_super_admin( get_current_user_id() ) ) {
unset( $all_roles[\'administrator\'] );
}
return $all_roles;
}
add_filter( \'editable_roles\', \'wpse_293133_filter_editable_roles\' );