web-dev-qa-db-ja.com

アップグレード計画を伝達するためにサイトごとにユーザーリストを生成する

私のチームは大規模なWordPressネットワークインストールを継承しました。アップデートを実行する必要があり、これを編集者および管理者に伝達する必要があります。私のシステム管理者は私にURLのリストとそれらのURLにマッチしたEメールアドレスを尋ねました。システム全体のアップグレードを管理するために、サイトごとに連絡する予定です。

これに対処するための効率的な方法は何でしょうか。

私はwp_usersテーブルからEメールのリストを得ることができます。これを既に(そして正しく)行うツールはありますか?

最も重要なこと:これらのユーザをネットワークインストールの個々のWPサイトにグループ化するにはどうすればいいですか?

言い換えれば、WP-Admin内からこのようなレポートを取得するにはどうすればよいですか?私のクライアントは、可能であればプラグインを使用して、管理インターフェース内でこのレポートを作成したいと考えています。

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

etcなど

3
Rick

これでうまくいくはずです。説明と一緒にコメントを読んでください。

// 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>';
2
GhostToast

Pluin inadmin area

スクリプトを使用したくない場合は、ワードプレスプラグイン をユーザーにCSVにエクスポート を使用できます。 !役割と登録日の範囲でユーザーをエクスポートすることもできます。

機能

  1. すべてのユーザーフィールドをエクスポートします
  2. ユーザーをメタエクスポートする
  3. 役割別にユーザーをエクスポートする
  4. 日付範囲でユーザーをエクスポートする
2
Ravinder Kumar

get_users() - a $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',
    ),
    .
    .
    .
);

参考文献

コーデックス:

2
Pat J

何かを試みる前にバックアップを取ってください。

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_usersを選択してください

"すべて調べる"

クエリ結果操作

輸出する

次に、MS ExcelまたはCSVを選択し、ユーザーログイン、nicename、email、およびuser_urlが表示されるまでさらに編集します。

それは接触するのに十分なはずです

2
128KB

これを可能にするプラグインがあるかどうかはわかりませんが、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_login、user_email、user_registered、およびdisplay_nameはユーザーの詳細情報で、pathはサブサイトのURLです(ネットワークインストールがドメインベースでディレクトリベースではない場合は、パスではなくドメインを選択することをお勧めします)。

これは、ユーザーが登録されているサイトごとに1行を生成することに注意してください。つまり、一方のサイトでadminとして、もう一方のエディターとしてユーザーを登録した場合、クエリはこのユーザーに対して2行を生成します。

GROUP_CONCATを使用すると、これらすべての行を1つに連結することができます。

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/ |
+----+------------+---------------------+---------------------+--------------+-----------------+
1

コンソール/端末を起動する

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;

結果を分析する

0
nocommit