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