2016-12-04 8 views
2

Ich möchte mein Verzeichnis nach Nachnamen sortieren. Wie kann ich das erreichen?Problem beim Sortieren nach Nachname mit get_user()

function dispDirectory() 
{ 
    global $user_ID; 

    // Disallow directory if there is a messaging administrator and this person is not it. 
    if ($this->admin_user_id && $this->admin_user_id != $user_ID) { 
    return ''; 
    } 

    $users = $this->get_users(); 
    $directory = ""; 


    foreach($users as $u) 
    { 
    $firstName = get_user_meta($u->ID, 'first_name', true); 
    $lastName = get_user_meta($u->ID, 'last_name', true);   

    $directory .= '<p><strong>'.$lastName.', '.$firstName.'</strong> - <a href="'.$this->actionURL.'newmessage&to='.$u->ID.'">'.__('Send Message', 'cartpaujpm').'</a></p>'; 
    } 
    return $directory; 
} 

zu sortieren, ich habe versucht, die folgenden vor der foreach-Schleife hinzu:

usort($users, create_function('$a, $b', 'return strnatcasecmp($a->last_name, $b->last_name);')); 

Diese Liste reorganisiert, aber nicht in alphabetischer Reihenfolge (oder jede Nutzordnung soweit ich das beurteilen kann)

Antwort

0

Dies war meine Lösung:

function dispDirectory() 
{ 
    global $user_ID; 

    // Disallow directory if there is a messaging administrator and this person is not it. 
    if ($this->admin_user_id && $this->admin_user_id != $user_ID) { 
    return ''; 
    } 

    $args = array(
     'meta_key' => 'last_name', 
    ); 

    $wp_user_query = new WP_User_Query($args); 
    $wp_user_query->query_orderby = str_replace('user_login', 'wp_usermeta.meta_value', $wp_user_query->query_orderby); 
    $wp_user_query->query(); 

    $users = $wp_user_query->get_results(); 


    foreach($users as $u) 
    { 
    $firstName = get_user_meta($u->ID, 'first_name', true); 
    $lastName = get_user_meta($u->ID, 'last_name', true);   

    $directory .= '<p><strong>'.$lastName.', '.$firstName.'</strong> - <a href="'.$this->actionURL.'newmessage&to='.$u->ID.'">'.__('Send Message', 'cartpaujpm').'</a></p>'; 
    } 
    return $directory; 
} 
0

Während Sie get_users() aufrufen, können Sie Argumente übergeben, mit denen Sie nach Metawerten sortieren können. Siehe this WP Codex.

Ein Beispiel (ungetestet) könnte sein:

$users = $this->get_users([ 
    'meta_key' => 'last_name', 
    'orderby' => 'meta_value', 
    'order' => 'ASC' 
]); 

ich Ihr Beispiel glaube, wird nicht funktionieren, da die Eigenschaft last_name nicht auf das User Objekt existiert (sondern die User Meta).

+0

Ich glaube, Sie über die Meta-Frage richtig sind. Ich habe versucht, die Argumente zu get_user() hinzuzufügen, wie Sie vorschlagen, aber es tut meiner Art nicht. Ich habe andere Beispiele gesehen, die das benutzen und sie scheinen zu funktionieren. Ich bin mir nicht sicher warum nicht hier. Verwirrend. Danke für Ihre Hilfe. –

+0

@CraigTucker spielen definitiv mit der Abfrage - Sie werden es schließlich richtig machen. Möglicherweise müssen Sie WP_User_Query auch auf die vollständige Dokumentation überprüfen. Was ich gepostet habe, sollte helfen - Sind Sie sicher, dass sich nach der Abfrage nichts anderes (zwischen Abfrage und Schleife) störend auswirkt? –

Verwandte Themen