Comment interroger une liste d'utilisateurs avec les blogs dans lesquels ils sont membres dans une installation wordpress multi-sites.
Par exemple, j'ai besoin des résultats ci-dessous
user domain
abc xyz.com
abc example.com
ggh example.com
J'ai essayé la requête ci-dessous, mais sa liste ne répertorie pas tous les domaines ..
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
Je ne sais pas comment fonctionne le réseau/les sites multiples. Quelqu'un peut-il me dire comment obtenir le résultat?
Vous pouvez utiliser get_blogs_of_user()
pour obtenir tous les blogs d'un utilisateur donné.
Donc, pour obtenir une liste triée par les utilisateurs:
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
Ayant besoin de la même chose, j'ai réussi à trouver les données clés dans les tables wp_usermeta. Cela a fonctionné pour moi:
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'
Résultats:
user_login domain role
============ ============ ================
webmaster blog1.com administrator
user blog1.com editor
webmaster blog2.com administrator
Vous ne pouvez pas laisser de commentaire, mais la réponse de Wraezor Sharp a très bien fonctionné pour moi. J'avais besoin d'adresses e-mail d'utilisateurs, notre instance multisite se trouvait sur le même nom de domaine et je ne voulais que des administrateurs et pas des abonnés. Voici ce que je suis venu avec:
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
;