come ottenere la lista di tutti gli utenti e i loro metadati

29 giu 2016, 15:45:38
Visualizzazioni: 115K
Voti: 19

Come posso ottenere una lista di tutti gli utenti con ruolo = 'Customers' includendo tutti i metadati per utente, ovvero wp_users + wp_usermeta.

La query qui sotto non genera i risultati desiderati.

$query = "SELECT * FROM wp_users INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id ORDER BY ID DESC');  ";
            
$data = $wpdb->get_results($query,ARRAY_A);

Ma quella lista non è corretta. Mostra ogni utente x volte a seconda del numero di righe in wp_usermeta.

Come posso filtrarla? In modo che ogni utente mostri per record tutti i suoi dati utente + metadati?

3
Commenti

Controlla questo

bravokeyl bravokeyl
29 giu 2016 16:46:31

ma poi ho bisogno di due chiamate diverse: 1 per l'utente e 1 per i metadati. Come le combino?

Hermants Hermants
29 giu 2016 16:51:07

E quella chiamata è??

Hermants Hermants
29 giu 2016 16:58:49
Tutte le risposte alla domanda 4
2
29

Penso che dovresti utilizzare le funzioni wp-api che faranno tutto per te.

  • La funzione get_users() recupererà tutti i dati degli utenti, basta definire i campi che ti servono.
  • La funzione get_user_meta() recupererà i metadati dell'utente.
 
$users = get_users( array( 'fields' => array( 'ID' ) ) );
foreach($users as $user){
        print_r(get_user_meta ( $user->ID));
    }
30 giu 2016 06:45:52
Commenti

Ma questo non farà una query per utente al database? C'è un modo per farlo con meno query?

Mikael Lindqvist Mikael Lindqvist
17 ago 2019 11:42:05

Quando WP recupera un oggetto come un utente/post/termine, pre-carica anche i suoi meta e li inserisce in wp_cache per ridurre il numero di query e velocizzare le operazioni. Quelle chiamate get_user_meta non eseguiranno query al database, i dati erano già stati recuperati quando è stata chiamata get_users.

Tom J Nowell Tom J Nowell
26 giu 2020 15:57:26
0

Un modo leggermente più formale per ottenere gli stessi risultati è il seguente. Sostituisci qualsiasi ruolo come necessario e questo codice presuppone che tu stia utilizzando WooCommerce per informazioni più dettagliate.

function GetSubscriberUserData()
{
  $DBRecord = array();
  $args = array(
      'role'    => 'Subscriber',
      'orderby' => 'last_name',
      'order'   => 'ASC'
  );
  $users = get_users( $args );
  $i=0;
  foreach ( $users as $user )
  {
    $DBRecord[$i]['role']           = "Subscriber";
    $DBRecord[$i]['WPId']           = $user->ID;
    $DBRecord[$i]['FirstName']      = $user->first_name;
    $DBRecord[$i]['LastName']       = $user->last_name;
    $DBRecord[$i]['RegisteredDate'] = $user->user_registered;
    $DBRecord[$i]['Email']          = $user->user_email;

    $UserData                       = get_user_meta( $user->ID );
    $DBRecord[$i]['Company']        = $UserData['billing_company'][0];
    $DBRecord[$i]['Address']        = $UserData['billing_address_1'][0];
    $DBRecord[$i]['City']           = $UserData['billing_city'][0];
    $DBRecord[$i]['State']          = $UserData['billing_state'][0];
    $DBRecord[$i]['PostCode']       = $UserData['billing_postcode'][0];
    $DBRecord[$i]['Country']        = $UserData['billing_country'][0];
    $DBRecord[$i]['Phone']          = $UserData['billing_phone'][0];
    $i++;
  }
  return $DBRecord;
}
2 nov 2019 02:53:33
3

Ho creato un semplice plugin gratuito, chiamato Flat Meta Data, che appiattisce i metadati di post e utenti in un CSV che può essere utilizzato più facilmente per report e analisi. Nel processo crea tabelle nel tuo database ([:prefix]postmeta_flat e [:prefix]usermeta_flat) che contengono le stesse informazioni e possono essere utilizzate in query più complesse. Queste tabelle hanno una riga per ogni post o utente e una colonna per ogni dato (meta_key) contenente i valori meta (meta_value).

Dopo aver installato e attivato il plugin (in wp-content/plugins/flat-table), è accessibile tramite un link nel menu principale del pannello di amministrazione, chiamato Flat Meta Data. Puoi quindi cliccare su uno dei pulsanti "Scarica metadati dei post" o "Scarica metadati degli utenti" per generare la tabella e scaricare il CSV contenente tutti i dati in formato foglio di calcolo.

Alcune note:

  1. Questo plugin è fornito gratuitamente. Utilizzalo a tuo rischio.
  2. Sono necessari i privilegi CREATE TABLE. Questo non dovrebbe essere un problema, ma potrebbe esserlo se hai limitato l'accesso all'utente del database di WordPress.
  3. La generazione e il download di un set completo di metadati può influire negativamente sulle prestazioni del sistema. Si prega di farlo solo durante le ore non lavorative o, ancora meglio, su un ambiente di test popolato con i tuoi dati live.

Fammi sapere se hai domande. Grazie.

24 giu 2020 17:39:13
Commenti

Ciao e benvenuto! Puoi aggiornare la tua risposta per spiegare come lo fa? Le risposte devono essere autonome, non possono fare affidamento interamente su link esterni.

Tom J Nowell Tom J Nowell
25 giu 2020 13:19:49

Grazie per le indicazioni, Tom. Spero che le mie modifiche siano sufficienti. Fammi sapere se hai bisogno di chiarimenti.

Tim Burch Tim Burch
26 giu 2020 15:49:57

Ah ma questo è solo come usare il plugin però :( Devi rispondere alla domanda, e un plugin non lo fa, puoi inserire link esterni come approfondimenti o esempi ma la risposta deve contenere la soluzione nel testo. Linkare un plugin è solo una raccomandazione, non una risposta. Leggendo questo ancora non ho idea di come il tuo plugin risolva il problema, non ci sono dettagli tecnici, il che è un peccato perché è un ottimo esempio per dimostrare competenze tecniche e rispondere praticamente alla domanda

Tom J Nowell Tom J Nowell
26 giu 2020 15:55:56
0
$members = get_users(
    array('role'    => 'company',
        'orderby' => 'ID',
        'order'   => 'ASC'
    )
);
array_map( function($member ){
  $member->usermeta =  array_map(function($data){
    return reset($data);
  }, get_user_meta( $member->ID ) );
  return $member;
}, $members); 

Questo restituirà i dati nel seguente formato

Array
(
    [0] => WP_User Object
        (
            [data] => stdClass Object
                (
                    [ID] => 20
                    [user_login] => aastha
                    [user_pass] => $P$BVmRgRiZyZWhMvGszAkquPKX0JjedF1
                    [user_nicename] => aastha
                    [user_email] => aastha@gmail.com
                    [user_url] => 
                    [user_registered] => 2021-11-29 10:43:21
                    [user_activation_key] => 
                    [user_status] => 0
                    [display_name] => aastha
                    [usermeta] => Array
                        (
                            [nickname] => aastha
                            [first_name] => 
                            [last_name] => 
                            [description] => 
                            [rich_editing] => true
                            [syntax_highlighting] => true
                            [comment_shortcuts] => false
                            [admin_color] => fresh
                            [use_ssl] => 0
                            [show_admin_bar_front] => true
                            [locale] => 
                            [wm_capabilities] => a:1:{s:7:"company";b:1;}
                            [wm_user_level] => 0
                            [name] => btc
                            [type] => 7
                            [status] => active
                            [company_age] => 10
                            [company_member] => 30
                            [address] => indoor
                            [city] => indoor
                            [pin] => 5454
                            [telephone] => 5434
                            [opening_time] => 09:00
                            [closing_time] => 20:00
                            [fax] => gfgf
                            [skull_from] => wednesday
                            [skull_to] => sunday
                            [mobile] => 3987665213
                            [overview] => ghgh
                            [username] => aastha
                            [email] => aastha@gmail.com
                            [wesite] => http://www.aastha.com
                            [skull_logo] => 
                        )

                )

            [ID] => 20
            [caps] => Array
                (
                    [company] => 1
                )

            [cap_key] => wm_capabilities
            [roles] => Array
                (
                    [0] => company
                )

            [allcaps] => Array
                (
                    [read] => 1
                    [level_0] => 1
                    [company] => 1
                )

            [filter] => 
            [site_id:WP_User:private] => 1
        )
);
4 dic 2021 16:19:42