cum să obții lista tuturor utilizatorilor și metadatele acestora

29 iun. 2016, 15:45:38
Vizualizări: 115K
Voturi: 19

Cum pot obține o listă a tuturor utilizatorilor cu rolul = 'Customers' inclusiv toate metadatele per utilizator, adică wp_users + wp_usermeta.

Interogarea de mai jos nu generează rezultatele dorite.

$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);

Dar acea listă nu este corectă. Afișează fiecare utilizator de x ori în funcție de numărul de rânduri din wp_usermeta.

Cum pot filtra acest lucru? Astfel încât fiecare utilizator să afișeze într-o singură înregistrare toate datele sale de utilizator + metadata?

3
Comentarii

Verifică acest

bravokeyl bravokeyl
29 iun. 2016 16:46:31

dar apoi am nevoie de două apeluri diferite, 1 pentru utilizator și 1 pentru metadate. Cum le combin?

Hermants Hermants
29 iun. 2016 16:51:07

Și acel apel este??

Hermants Hermants
29 iun. 2016 16:58:49
Toate răspunsurile la întrebare 4
2
29

Cred că ar trebui să folosești funcțiile wp-api care vor face totul pentru tine.

  • get_users() funcția va obține toate datele utilizatorilor, doar definește câmpurile de care ai nevoie.
  • get_user_meta() funcția va obține datele meta ale utilizatorului.

$users = get_users( array( 'fields' => array( 'ID' ) ) );
foreach($users as $user){
        print_r(get_user_meta ( $user->ID));
    }
30 iun. 2016 06:45:52
Comentarii

Dar acest lucru nu va face o interogare pentru fiecare utilizator în baza de date? Există vreo modalitate de a face acest lucru cu mai puține interogări?

Mikael Lindqvist Mikael Lindqvist
17 aug. 2019 11:42:05

Când WP preia un obiect, cum ar fi un utilizator/post/termen, el preîncarcă și metadatele asociate și le stochează în wp_cache pentru a reduce numărul de interogări și a accelera procesul. Acele apeluri get_user_meta nu vor genera interogări către baza de date, deoarece datele au fost deja preluate când a fost apelată funcția get_users.

Tom J Nowell Tom J Nowell
26 iun. 2020 15:57:26
0

Un mod puțin mai formal de a obține aceleași rezultate este următorul. Înlocuiți orice rol după cum este necesar, iar acest cod presupune că utilizați WooCommerce pentru informații mai detaliate.

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

Am creat un simplu plugin gratuit, numit Flat Meta Data, care transformă meta datele articolelor și utilizatorilor într-un fișier CSV care poate fi mai ușor utilizat pentru raportare și analiză. În acest proces, creează tabele în baza ta de date ([:prefix]postmeta_flat și [:prefix]usermeta_flat) care conțin aceleași informații și pot fi utilizate în interogări mai complexe. Aceste tabele au un rând pentru fiecare articol sau utilizator și o coloană pentru fiecare punct de date (meta_key) care conține valorile meta (meta_value).

După instalarea și activarea pluginului (în wp-content/plugins/flat-table), acesta este accesibil printr-un link din meniul principal al panoului de administrare, numit Flat Meta Data. Apoi poți face clic pe butonul "Descarcă meta datele articolelor" sau "Descarcă meta datele utilizatorilor" pentru a genera tabelul și a descărca fișierul CSV care conține toate datele în format de tabel.

Câteva observații:

  1. Acest plugin este oferit gratuit. Folosește-l pe propriul risc.
  2. Sunt necesare privilegii CREATE TABLE. Acest lucru nu ar trebui să fie o problemă, dar poate fi dacă ai restricționat accesul utilizatorului WordPress la baza de date.
  3. Generarea și descărcarea unui set complet de meta date poate afecta performanța sistemului. Te rugăm să faci acest lucru doar în afara orelor de vârf sau, mai bine, pe un mediu de testare populat cu datele tale live.

Te rog să mă anunți dacă ai întrebări. Mulțumesc.

24 iun. 2020 17:39:13
Comentarii

Bună ziua și bun venit! Poți să actualizezi răspunsul tău pentru a explica cum face acest lucru? Răspunsurile trebuie să fie autonome, ele nu se pot baza în întregime pe link-uri externe.

Tom J Nowell Tom J Nowell
25 iun. 2020 13:19:49

Mulțumesc pentru îndrumare, Tom. Sper că modificările mele sunt suficiente. Te rog să-mi spui dacă ai nevoie de clarificări.

Tim Burch Tim Burch
26 iun. 2020 15:49:57

Ah, dar asta este doar cum se folosește plugin-ul :( Trebuie să răspunzi la întrebare, iar un plugin nu face asta, poți să incluzi link-uri externe ca lectură suplimentară sau ca exemple, dar răspunsul trebuie să conțină soluția în text. Link-ul către un plugin este doar o recomandare, nu un răspuns. Citind acest lucru, încă nu am nicio idee cum rezolvă plugin-ul tău problema, nu există detalii tehnice, ceea ce este păcat pentru că este un exemplu minunat de a demonstra abilități tehnice și de a răspunde practic la întrebare.

Tom J Nowell Tom J Nowell
26 iun. 2020 15:55:56
0
$members = get_users(
    array('role'    => 'company', // Obține utilizatorii cu rolul 'company'
        'orderby' => 'ID',       // Sortează după ID
        'order'   => 'ASC'        // Ordine crescătoare
    )
);
// Transformă fiecare utilizator adăugând metadatele sub forma simplificată
array_map( function($member ){
  $member->usermeta =  array_map(function($data){
    return reset($data); // Extrage primul element din fiecare array de metadate
  }, get_user_meta( $member->ID ) );
  return $member;
}, $members); 

Acest cod va returna date în următorul format

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 dec. 2021 16:19:42