Gerar uma lista de usuários por site para comunicar planos de atualização

Minha equipe herdou uma grande instalação do WordPress Networks. As atualizações precisam ser executadas e precisamos comunicar isso aos nossos editores e administradores. O administrador do sistema me pediu uma lista de URLs e endereço de e-mail correspondente a esses URLs. Nós planejamos contatá-los site por site para gerenciar uma atualização de todo o sistema.

Qual seria uma maneira eficiente de fazer isso?

Posso obter uma lista de e-mails da tabela wp_users . Existe uma ferramenta que faz isso já (e corretamente)?

O mais importante: como posso agrupar esses usuários em seus sites WP individuais na instalação de redes?

Em outras palavras, como posso obter um relatório como este dentro do WP-Admin? O meu cliente gostaria de usar um plug-in, se possível, para produzir esse relatório dentro da interface de administração.

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

etc etc

Solutions Collecting From Web of "Gerar uma lista de usuários por site para comunicar planos de atualização"

Isso deve fazer o truque. Leia com os comentários para obter alguma explicação.

 // 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 ''; // spit out as table - not sure what output you need. could easily create CSV by modifying this foreach($editors_and_admins as $constituent){ echo '' // get name echo ''; // get email echo ''; // get URL echo ''; echo ''; } echo '
'.get_the_author_meta('first_name', $constituent->ID).' '.get_the_author_meta('last_name', $constituent->ID).'https://wordpress.stackexchange.com//questions/101043/generate-a-user-list-per-site-to-communicate-upgrade-plans/'.$constituent->user_email.'https://wordpress.stackexchange.com//questions/101043/generate-a-user-list-per-site-to-communicate-upgrade-plans/'.$constituent->user_url.'
';

get_users() – você poderia usá-lo em conjunto com os resultados de uma consulta $wpdb ao longo das linhas de $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; } } } 

Se eu tiver tudo certo, então, no final, $list deve ser uma matriz do formato

 $list = array( 'site-1' => array( 'email-1', 'email-2', ), 'site-2' => array( 'email-1', 'email-3', ), . . . ); 

Referências

Códice:

  • get_users()
  • get_blogaddress_by_id()

Faça backups antes de tentar qualquer coisa.

Phpmyadmin, guia SQL, então: “Executar consulta SQL / consultas no database”:

 SELECT COUNT(*) AS Rows, user_login, user_email, user_nicename, user_url FROM wp_users GROUP BY user_login ORDER BY user_login 

OU se você não está confortável com o SQL:

Fácil exportação de phpmyadmin

Selecione wp_users

“Verificar tudo”

Operações de resultados da consulta

Exportar

Em seguida, selecione MS Excel ou CSV e edite até que seja deixado com login do usuário, nicename, email e user_url.

Isso deve ser suficiente para fazer contato

Área de inadmin de Pluin

Se você não deseja usar qualquer script, então, você pode usar o plugin WordPress Exportar usuários para CSV . Isso pode exportar TODOS os dados do usuário e metadados, e isso funciona! Você pode até mesmo exportar os usuários por período de function e registro.

Características :

  1. Exporta todos os campos de usuários
  2. Meta dos usuários exportados
  3. Exporta usuários por function
  4. Exporta usuários por período

Não tenho ideia se há algum plugin que permita isso, mas se você não se importa de usar um pouco de SQL, você pode extraí-lo desta maneira:

 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"%'; 

Isso produzirá o seguinte conjunto de resultados:

 +----+------------+---------------------+---------------------+--------------+----------------+ | ID | user_login | user_email | user_registered | display_name | path | +----+------------+---------------------+---------------------+--------------+----------------+ | 1 | jdoe | johndoe@example.com | 2014-12-02 10:46:26 | John Doe | /subsite-path/ | +----+------------+---------------------+---------------------+--------------+----------------+ 

onde ID, user_login, user_email, user_registered e display_name são detalhes do usuário enquanto o caminho é o URL dos subsídios (você pode querer selecionar o domínio em vez do caminho se a sua instalação em rede for baseada em domínio e não baseada em diretório)

Observe que isso irá produzir uma linha por site onde o usuário está registrado, o que significa que, se você tiver um usuário registrado como administrador em um site e, como editor, o outro, a consulta produzirá 2 linhas para esse usuário.

Usando GROUP_CONCAT, você pode concatenar todas essas linhas em uma:

 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; 

Isso produzirá o seguinte conjunto de resultados:

 +----+------------+---------------------+---------------------+--------------+-----------------+ | ID | user_login | user_email | user_registered | display_name | path | +----+------------+---------------------+---------------------+--------------+-----------------+ | 1 | jdoe | johndoe@example.com | 2014-12-02 10:46:26 | John Doe | /subsite1-path/ | | | | | | | /subsite2-path/ | +----+------------+---------------------+---------------------+--------------+-----------------+ 

Iniciar console / terminal

 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; 

Analisar resultados