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

3

Minha equipe herdou uma grande instalação do WordPress Networks. Atualizações precisam ser executadas e precisamos comunicar isso aos nossos editores e administradores. Meu administrador do sistema me pediu uma lista de URLs e endereços de e-mail correspondidos a esses URLs. Planejamos contatá-los site por site para gerenciar uma atualização ampla do sistema.

Qual seria uma maneira eficiente de fazer isso?

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

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

Em outras palavras, como posso obter um relatório como esse no Administrador do WP? Meu cliente gostaria de usar um plug-in, se possível, para produzir esse relatório dentro da interface administrativa.

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

etc, etc

    
por Rick 28.05.2013 / 20:46

6 respostas

2

Isso deve fazer o truque. Leia com os comentários para 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 '<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>';
    
por GhostToast 04.06.2013 / 22:28
2

get_users() - você pode usá-lo em conjunto com os resultados de um $wpdb consulta nas 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 bem, 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

Codex:

por Pat J 04.06.2013 / 22:25
2

Faça backups antes de tentar qualquer coisa.

Phpmyadmin, guia SQL e, em seguida: "Executar consultas / consultas SQL no banco de dados":

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 se sentir confortável com o SQL:

Selecionewp_users

"Marcar tudo"

Operações de resultados da consulta

Exportar

Em seguida, selecione MS Excel ou CSV e edite ainda mais até que você tenha o login do usuário, nicename, email e user_url.

Isso deve ser suficiente para fazer contato

    
por 128KB 04.06.2013 / 22:32
2

Sevocênãoquiserusarnenhumscript,useoplug-indowordpress Exportar usuários para CSV .Este pode exportar todos os dados do usuário e metadados, e isso funciona! Você pode até exportar os usuários por função e intervalo de datas de registro.

Recursos :

  1. Exporta todos os campos de usuários
  2. Exporta meta de usuários
  3. Exporta usuários por função
  4. Exporta usuários por período
por Ravinder Kumar 05.06.2013 / 11:08
1

Eu não tenho ideia se existe algum plugin que permita isso, mas se você não se importar em 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 path é o URL de subsites (você pode querer selecionar domínio em vez de path se sua instalação de rede for baseada em domínio e não em diretório)

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

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

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/ |
+----+------------+---------------------+---------------------+--------------+-----------------+
    
por Jonathan Pasquier 12.09.2016 / 14:41
0

Inicie o 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;

Analise os resultados

    
por nocommit 04.06.2013 / 23:44