如何为用户添加添加/编辑管理员的功能?

时间:2017-02-06 作者:Abby Fichtner

我创建了一个名为“开发人员”的新用户角色,并为其提供了管理员的所有功能:

$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;
}
但当我这样做时,角色下拉列表仅显示每个角色的第一个字母(他们有一组自定义的角色,这显示了每个角色的第一个字母):

enter image description here

我还尝试简单地将“administrator”添加到从editable\\u roles过滤器返回的$roles中,但可以预见的是,它只是在下拉列表中添加了一个带有“a”的项目。

有人知道我该怎么做吗?(请注意,我不在多站点上,因此我认为这里没有超级管理员角色)

谢谢

1 个回复
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\' );
}
停用并重新激活插件,开发人员角色应具有与管理员角色相同的功能。

相关推荐