繁体   English   中英

WordPress MultiSite 中博客所有者的用户 ID

[英]User ID of a Blog Owner in WordPress MultiSite

我正在创建一个函数,该函数将采用$blog_id并返回在多站点网络中拥有/创建博客的用户的相应$user_id

public function SelectOwnerUserIdFromBlogId( $blog_id ) { ... }

我一直在查看数据库,我能找到的最接近的事情是查看 wp_usermeta 表并过滤功能,但这感觉太黑了。 有什么更好的主意吗?

SELECT user_id as UserId,
    IF(SUBSTRING_INDEX(SUBSTRING_INDEX(meta_key, '_', 2), '_', -1) = 'capabilities', 1, SUBSTRING_INDEX(SUBSTRING_INDEX(meta_key, '_', 2), '_', -1)) as BlogId
FROM wp_usermeta
WHERE meta_key like '%_capabilities'
    AND meta_value like '%administrator%'

在此处输入图片说明

我想我想通了查询。 只需替换 WHERE 条件中的 blog_id 即可获得所需的用户 ID。

SELECT meta_value as UserId
FROM wp_blogs b
JOIN wp_sitemeta sm
    ON sm.site_id = b.site_id and sm.meta_key = 'admin_user_id'
WHERE b.blog_id = 2

这就是我的做法:

连接到wpmu_new_blog操作,该操作将在创建新站点时触发。

为此,请在您的函数中执行以下操作:

add_site_option( 'site_author', $user_id );

站点作者现在将添加到站点选项中。

之前不能说任何事情,但从当前版本 (4.9.7) 开始,您可以使用网络选项来实现这一点。

add_action('wpmu_new_blog', 'record_site_operator', 10, 2);

function record_site_operator($blog_id, $user_id) {
    update_network_option(NULL, 'site_operator_'.$site_id, $user);
}

你可以这样做:

 // replace 2 with ID of site you want to use.
 $target_id = 2;
 $alluser = get_users( 
                array( 'blog_id' => $target_id,
                    'fields' => array( 'ID' ),
                     'exclude'  => array( 1), // excluding 1 because it's super admin of network
                 )
            );

$alluser 拥有属于站点 ID 2 的所有用户的 ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM