为每个站点生成用户列表,以传达升级计划

时间:2013-05-28 作者:Rick

我的团队继承了一个大型WordPress网络安装。更新需要运行,我们需要将此信息传达给我们的编辑和管理员。我的系统管理员要求我提供与这些URL匹配的URL和电子邮件地址列表。我们计划逐个站点联系他们,以管理系统范围的升级。

有什么有效的方法可以做到这一点?

我可以从wp_users 桌子是否有一个工具已经(并且正确地)完成了这项工作?

Most importantly: How can I group these users to their individual WP sites in the Networks install?

换句话说,我如何从WP管理员内部获得这样的报告?如果可能的话,我的客户希望使用插件在管理界面内生成此报告。

site one
- smellyPete
- bilboBaggins989 
site two
- sallysue997
- billyBob
等等等等

6 个回复
最合适的回答,由SO网友:GhostToast 整理而成

这应该可以奏效。阅读评论以获得一些解释。

// get users with specified roles -- this can go in functions
function get_users_with_role( $roles ) {
    global $wpdb;
    if ( ! is_array( $roles ) )
        $roles = array_walk( explode( ",", $roles ), \'trim\' );
    $sql = \'
        SELECT  ID 
        FROM        \' . $wpdb->users . \' INNER JOIN \' . $wpdb->usermeta . \'
        ON          \' . $wpdb->users . \'.ID             =       \' . $wpdb->usermeta . \'.user_id
        WHERE       \' . $wpdb->usermeta . \'.meta_key        =       \\\'\' . $wpdb->prefix . \'capabilities\\\'
        AND     (
    \';
    $i = 1;
    foreach ( $roles as $role ) {
        $sql .= \' \' . $wpdb->usermeta . \'.meta_value    LIKE    \\\'%"\' . $role . \'"%\\\' \';
        if ( $i < count( $roles ) ) $sql .= \' OR \';
        $i++;
    }
    $sql .= \' ) \';
    $sql .= \' ORDER BY display_name \';
    $userIDs = $wpdb->get_col( $sql );
    return $userIDs;
}

////// everything else could go in a custom page template just for viewing temporarily.

// poll database for users we need, using custom function (listed above)
$editors_and_admins = get_users_with_role(array(\'editor\', \'administrator\'));

// get user objects
$editors_and_admins = get_users(array(\'include\' => $editors_and_admins);

echo \'<table>\';
// spit out as table - not sure what output you need. could easily create CSV by modifying this
foreach($editors_and_admins as $constituent){
    echo \'<tr>\'
    // get name
    echo \'<td>\'.get_the_author_meta(\'first_name\', $constituent->ID).\' \'.get_the_author_meta(\'last_name\', $constituent->ID).\'</td>\';
    // get email
    echo \'<td><a href="mailto:\'.$constituent->user_email\'">\'.$constituent->user_email.\'</a></td>\';
    // get URL
    echo \'<td><a href="\'.$constituent->user_url.\'">\'.$constituent->user_url.\'</a></td>\';
    echo \'</tr>\';
}
echo \'</table>\';

SO网友:Pat J

get_users() -- 您可以将其与$wpdb 沿着以下行查询$wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );

function tell_all() {
    global $wpdb;
    $all_sites = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
    $list = array();
    foreach( $all_sites as $site ) {
        $args = array(
            \'blog_id\' => $site,
            \'fields\' => \'user_email\',
            \'role\' => \'Editor\',
        );
        $url = get_blogaddress_by_id( $site );
        $list[$url] = array();
        $editors = get_users( $args );
        $args[\'role\'] = \'Administrator\';
        $administrators = get_users( $args );
        $users = array_merge( $editors, $administrators );
        foreach( $users as $user ) {
            $list[$url][] = $user;
        }

    }
}
如果我没弄错的话,那么最后,$list 应为以下格式的数组

$list = array(
    \'site-1\' => array( 
        \'email-1\',
        \'email-2\',
    ),
    \'site-2\' => array(
        \'email-1\',
        \'email-3\',
    ),
    .
    .
    .
);
参考文献:

SO网友:128KB

在尝试任何操作之前进行备份。

Phpmyadmin,SQL选项卡,然后:“在数据库上运行SQL查询”:

SELECT COUNT(*) AS Rows, user_login, user_email, user_nicename, user_url FROM wp_users GROUP BY user_login ORDER BY user_login
或者,如果您不熟悉SQL:

easy phpmyadmin export

选择wp\\U用户

“全部选中”

查询结果操作

出口

然后选择MS Excel或CSV并进一步编辑,直到剩下用户登录名、nicename、电子邮件和user\\u url。

这应该足够联系

SO网友:Ravinder Kumar

Pluin inadmin area

如果你不想使用任何脚本,那么你可以使用wordpress插件Export Users to CSV.这可以导出所有用户数据和元数据,这很有效!您甚至可以按角色和注册日期范围导出用户。

Features:

导出所有用户字段导出用户元按角色导出用户按日期范围导出用户

SO网友:Jonathan Pasquier

我不知道是否有任何插件允许这样做,但如果您不介意使用一些SQL,可以通过以下方式提取:

SELECT u.ID, u.user_login, u.user_email, u.user_registered, u.display_name, b.path 
FROM wp_users u
LEFT JOIN wp_usermeta um ON um.user_id = u.ID
LEFT JOIN wp_blogs b ON um.meta_key LIKE CONCAT_WS(\'_\', \'wp\', b.blog_id, \'capabilities\')
WHERE um.meta_value LIKE \'%"administrator"%\' OR um.meta_value LIKE \'%"editor"%\';
这将生成以下结果集:

+----+------------+---------------------+---------------------+--------------+----------------+
| ID | user_login |     user_email      |   user_registered   | display_name |      path      |
+----+------------+---------------------+---------------------+--------------+----------------+
|  1 | jdoe       | [email protected] | 2014-12-02 10:46:26 | John Doe     | /subsite-path/ |
+----+------------+---------------------+---------------------+--------------+----------------+
其中,ID、user\\u login、user\\u email、user\\u registered和display\\u name是用户的详细信息,而path是子网站URL(如果您的网络安装是基于域而不是基于目录的,则可能需要选择域而不是路径)

请注意,这将为注册用户的每个站点生成一行,这意味着如果您在一个站点上注册了一个管理员,在另一个站点上注册了一个编辑器,则查询将为此用户生成两行。

使用GROUP\\u CONCAT,您可以将所有这些行连接为一行:

SELECT u.ID, u.user_login, u.user_email, u.user_registered, u.display_name, GROUP_CONCAT(b.path ORDER BY b.path SEPARATOR \'\\n\') 
FROM wp_users u
LEFT JOIN wp_usermeta um ON um.user_id = u.ID
LEFT JOIN wp_blogs b ON um.meta_key LIKE CONCAT_WS(\'_\', \'wp\', b.blog_id, \'capabilities\')
WHERE um.meta_value LIKE \'%"administrator"%\' OR um.meta_value LIKE \'%"editor"%\'
GROUP BY u.ID;
这将生成以下结果集:

+----+------------+---------------------+---------------------+--------------+-----------------+
| ID | user_login |     user_email      |   user_registered   | display_name |       path      |
+----+------------+---------------------+---------------------+--------------+-----------------+
|  1 | jdoe       | [email protected] | 2014-12-02 10:46:26 | John Doe     | /subsite1-path/ |
|    |            |                     |                     |              | /subsite2-path/ |
+----+------------+---------------------+---------------------+--------------+-----------------+

SO网友:nocommit

启动控制台/终端

mysql -u username -p
password

USE wpdatabasename;

SELECT 
    `ID` ,
    `user_login` , 
    `user_nicename` , 
    `user_email` , 
    `user_url` , 
    `user_status` , 
    `display_name` 
FROM `wp_users` 
ORDER BY `user_email` DESC;
分析结果

结束

相关推荐

正在尝试在WordPress MultiSite中输出“访问次数最多的博客”列表

有人知道如何从Wordpress Multisite中获得“访问量最大”的列表吗?我有很多博客,一直在寻找一种方法来输出前10/20个访问量最大的博客列表,但找不到任何插件或代码片段。示例-如本网站右侧的列表(非WP)http://blogg.se/