私のチームは大規模なWordPressネットワークインストールを継承しました。アップデートを実行する必要があり、これを編集者および管理者に伝達する必要があります。私のシステム管理者は私にURLのリストとそれらのURLにマッチしたEメールアドレスを尋ねました。システム全体のアップグレードを管理するために、サイトごとに連絡する予定です。
これに対処するための効率的な方法は何でしょうか。
私はwp_users
テーブルからEメールのリストを得ることができます。これを既に(そして正しく)行うツールはありますか?
最も重要なこと:これらのユーザをネットワークインストールの個々のWPサイトにグループ化するにはどうすればいいですか?
言い換えれば、WP-Admin内からこのようなレポートを取得するにはどうすればよいですか?私のクライアントは、可能であればプラグインを使用して、管理インターフェース内でこのレポートを作成したいと考えています。
site one
- smellyPete
- bilboBaggins989
site two
- sallysue997
- billyBob
etcなど
これでうまくいくはずです。説明と一緒にコメントを読んでください。
// 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>';
スクリプトを使用したくない場合は、ワードプレスプラグイン をユーザーにCSVにエクスポート を使用できます。 !役割と登録日の範囲でユーザーをエクスポートすることもできます。
機能:
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',
),
.
.
.
);
コーデックス:
何かを試みる前にバックアップを取ってください。
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に慣れていない場合は、
Wp_usersを選択してください
"すべて調べる"
クエリ結果操作
輸出する
次に、MS ExcelまたはCSVを選択し、ユーザーログイン、nicename、email、およびuser_urlが表示されるまでさらに編集します。
それは接触するのに十分なはずです
これを可能にするプラグインがあるかどうかはわかりませんが、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/ |
+----+------------+---------------------+---------------------+--------------+-----------------+
コンソール/端末を起動する
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;
結果を分析する