如何在 get_users 查询中由超级管理员进行搜索?

How do I search by superadmins within a get_users query?

在 WordPress 多站点安装中,我试图使用主题中的函数获取我站点的所有超级管理员的 ID。 (这里是多站点的新手)。但是,我似乎无法使用 get_users() 函数访问它们,如下所示:

$roles     = [ 'superadministrator','administrator'];

$user_ids = get_users( array( 'role__in' => $roles, 'fields' => 'ID' ) );

有 get_super_admins() 函数,但这似乎只是 return 名称列表,而不是 ID。另外,我只想 运行 一个查询而不是两个,所以这个功能并不理想。

Super Admin 是一个特殊角色,与管理员和订阅者等其他角色不同,超级管理员角色不会像其他角色一样保存到相同的 WordPress 选项中。相反,选项名称是 site_admins,它只存储被授予超级管理员角色的用户的 用户名。所以 superadministrator 不是 WordPress 中的默认角色,即没有这样的角色。

但是,由于 get_super_admins() returns the usernames saved in the site_admins option, then you can use that with get_users() 通过将 login__in arg 设置为这样的用户名:

$user_ids = get_users( array( 'login__in' => get_super_admins(), 'fields' => 'ID' ) );

或者像这样,包括所有管理员用户:

$admins = get_users( array(
    'role__in' => 'administrator',
    'fields'   => array( 'user_login' ),
) );

$logins = array_merge( get_super_admins(), wp_list_pluck( $admins, 'user_login' ) );

$user_ids = get_users( array(
    'login__in' => $logins,
    'fields'    => 'ID',
) );

但是,是的,以上需要两次 get_users() 调用。

[Edit] 请注意 blog_id parameter 默认为当前站点 ID,因此如果你想检索所有站点(或整个网络)中的超级管理员,那么你可以将 blog_id 设置为 0,如下所示:

$user_ids = get_users( array(
    'login__in' => get_super_admins(),
    'fields'    => 'ID',
    'blog_id'   => 0, // set it to 0 to search in all sites
) );

但是,如果您拥有大型网络(许多站点、用户等),这可能会导致性能问题,因此您可能需要寻找替代方法或不同的代码来检索所有超级管理员。