用于获取所有用户及其博客列表的SQL查询

时间:2013-12-19 作者:NEO

如何在多站点wordpress安装中查询用户列表以及他们所属的博客。

例如,我需要以下结果

user domain
abc  xyz.com
abc  example.com
ggh  example.com
我尝试了下面的查询,但它没有列出所有域。。

SELECT DISTINCT a.user_login, a.user_email, c.domain
FROM wp_users a
JOIN wp_usermeta b ON a.id = b.user_id
JOIN wp_blogs c ON b.meta_value = c.site_id
LIMIT 0 , 100
我不确定网络/多站点是如何工作的。。谁能告诉我怎么得到结果吗?

3 个回复
最合适的回答,由SO网友:Pat J 整理而成

您可以使用get_blogs_of_user() 获取给定用户的所有博客。

因此,要获得按用户排序的列表,请执行以下操作:

global $wpdb;
$blogs = array();
$user_ids = $wpdb->get_col( \'SELECT ID FROM $wpdb->users\' );
foreach( $user_ids as $user_id ) {
    $blogs[$user_id] = get_blogs_of_user( $user_id );
}
// you can use var_dump( $blogs ); to see what\'s in the $blogs array

SO网友:Wraezor Sharp

出于同样的需要,我设法在wp\\u usermeta表中找到了关键数据。这对我很有用:

SELECT u.user_login, b.domain,
  SUBSTRING_INDEX(SUBSTRING_INDEX(um.meta_value,\'"\', 2), \'"\', -1) as role
FROM wp_users u
JOIN wp_usermeta um ON u.ID = um.user_id
JOIN wp_blogs b ON b.blog_id = SUBSTRING(um.meta_key, 4, LENGTH(um.meta_key)-16)
WHERE um.meta_key LIKE \'wp_%_capabilities\'
结果:

user_login    domain       role
============  ============ ================
webmaster     blog1.com    administrator
user          blog1.com    editor
webmaster     blog2.com    administrator

SO网友:mvc

我无法发表评论,但Wraezor Sharp的回应对我来说非常有效。我需要用户电子邮件地址,我们的多站点实例都在同一个域名上,我只需要管理员,不需要订阅者。这就是我想到的:

SELECT
  u.user_login
  , u.user_email
  , concat(\'https://\', b.domain, b.path) as site
  , SUBSTRING_INDEX(SUBSTRING_INDEX(um.meta_value,\'"\', 2), \'"\', -1) as role
FROM
  wp_users u
  JOIN wp_usermeta um ON u.ID = um.user_id
  JOIN wp_blogs b ON b.blog_id = SUBSTRING(um.meta_key, 4, LENGTH(um.meta_key)-16)
WHERE
  um.meta_key LIKE \'wp_%_capabilities\'
  AND SUBSTRING_INDEX(SUBSTRING_INDEX(um.meta_value,\'"\', 2), \'"\', -1) IN (\'administrator\', \'editor\')
ORDER BY
  site asc
;

结束

相关推荐

How to set up wp multisite?

安装所有台阶后(http://codex.wordpress.org/Create_A_Network) 我尝试创建网站。我无法访问创建的任何网站的仪表板。它表示找不到页面(错误404)。为了启动fresh,我卸载了WP,然后按照每个步骤安装。我不知道该怎么办。我只能访问根站点的仪表板。其余的我都不行。