我创建了一个名为“开发人员”的新用户角色,并为其提供了管理员的所有功能:
$admin_role = get_role( \'administrator\' );
add_role( \'developer\', __( \'Developer\' ), $admin_role->capabilities );
这很好用
except 我希望开发人员能够添加/编辑管理员用户。但是,当我添加新用户时,“管理员”不是用户角色下拉列表中的选项之一。
我尝试让editable\\u roles过滤器返回系统中的所有角色,以便开发人员可以添加/编辑所有角色:
add_filter( \'editable_roles\', \'allow_developers_to_add_administrators\' );
function allow_developers_to_add_administrators( $roles ){
$user = wp_get_current_user();
if( in_array( \'developer\', $user->roles )){
return array_keys( $GLOBALS[\'wp_roles\']->roles );
}
return $roles;
}
但当我这样做时,角色下拉列表仅显示每个角色的第一个字母(他们有一组自定义的角色,这显示了每个角色的第一个字母):
我还尝试简单地将“administrator”添加到从editable\\u roles过滤器返回的$roles中,但可以预见的是,它只是在下拉列表中添加了一个带有“a”的项目。
有人知道我该怎么做吗?(请注意,我不在多站点上,因此我认为这里没有超级管理员角色)
谢谢
SO网友:Nathan Johnson
确保在插件激活/停用时添加和删除角色。
add_role()
仅在角色不存在时添加角色。因此,如果您已经添加了开发人员角色,但没有添加管理员的功能,那么再次调用add\\u role()将不会重新添加该角色。您必须先删除该角色。
<?php
/**
* Plugin Name: Stackexchange Sample
*/
//* Don\'t access this file directly
defined( \'ABSPATH\' ) or die();
//* Add role for developer that has the same capabilities as administrators
register_activation_hook( __FILE__ , \'wpse_106269_activation\' );
function wpse_106269_activation() {
$admin_role = get_role( \'administrator\' );
add_role( \'developer\', __( \'Developer\' ), $admin_role->capabilities );
}
//* Remove developer role
register_deactivation_hook( __FILE__ , \'wpse_106269_deactivation\' );
function wpse_106269_activation() {
remove_role( \'developer\' );
}
停用并重新激活插件,开发人员角色应具有与管理员角色相同的功能。