如何解决如何在 get_users 查询中按超级管理员进行搜索?
在 WordPress 多站点安装中,我尝试使用主题中的函数获取我站点的所有超级管理员的 ID。 (这里是多站点的新手)。但是,我似乎无法使用 get_users() 函数访问它们,如下所示:
$roles = [ 'superadministrator','administrator'];
$user_ids = get_users( array( 'role__in' => $roles,'fields' => 'ID' ) );
有 get_super_admins() 函数,但它似乎只返回名称列表,而不是 ID。另外,我希望能够运行一个而不是两个查询,所以这个功能并不理想。
解决方法
Super Admin 是一个特殊角色,与管理员和订阅者等其他角色不同,超级管理员角色不会像其他角色一样保存到相同的 WordPress 选项中。相反,选项名称是 site_admins
,它只存储被授予超级管理员角色的用户的用户名。所以 superadministrator
不是 WordPress 中的默认角色,即没有这样的角色。
但是,由于 get_super_admins()
返回保存在 site_admins
选项中的用户名,那么您可以通过将 login__in
arg 设置为这些用户名来将其与 get_users()
一起使用:
$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(),'blog_id' => 0,// set it to 0 to search in all sites
) );
但是,如果您拥有大型网络(许多站点、用户等),这可能会导致性能问题,因此您可能需要寻找替代方法或不同的代码来检索所有超级管理员。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。