UI选择元素打开user-edit.php
, 您可以在UI中看到下拉列表。下拉列表<select>
包装是硬编码的。
然后,管理界面根据内联注释做了一件漂亮的事情:// Get the highest/primary role for this user
. 事实上,它是获得分配给用户的第一个角色(我们必须记住这一点)。
那么基本上只有一个电话wp_dropdown_roles()
. 此函数除了遍历可用角色并将其包装在其中之外,不做任何其他事情<option>
元素。But, 它做了一件很酷的事:它使用get_editable_roles()
. 魔法来了!过滤器,用于global $wp_roles->roles
. 默认情况下,这将返回所有角色,但您可以跳入并简单地取消设置您想要的任何角色。
// Add this as mu-plugin
function wpse32738_get_editable_roles( $editable_roles )
{
if ( current_user_can( \'client\' ) )
// unset whatever you need here.
return $editable_roles;
}
add_filter( \'editable_roles\', \'wpse32738_get_editable_roles\' );
角色是一个“扁平”系统。一个角色可以具有可以否决其他功能的功能