Listen Sie Benutzer alphabetisch mit Überschrift auf

Wie kann ich eine Liste von Benutzern mit alphabetischen Überschriften anzeigen? Beispielsweise:

EIN
Adam
Alan

B
Rechnung
Bob

Ich habe Beispiele gefunden, die es mit Posts machen, aber ich kann nicht herausfinden, wie man es mit WP_User_query() 🙁

Solutions Collecting From Web of "Listen Sie Benutzer alphabetisch mit Überschrift auf"

Nach einigem Basteln habe ich mir etwas einfallen lassen. Es ist sicherlich nicht die beste Methode, aber da es keinen guten Weg gibt, dies direkt über den Core zu tun, ohne eine Reihe von Array-Umordnungen vornehmen zu müssen, ist SQL hier eine bessere Lösung. Wie auch immer, das SQL ist wie folgt:

 SELECT users.*, meta.meta_value FROM $wpdb->users AS users LEFT JOIN $wpdb->usermeta AS meta ON users.ID = meta.user_id WHERE meta.meta_key = 'first_name' AND meta.meta_value != '' ORDER BY meta.meta_value ASC 

Da ist nichts Besonderes, es werden nur alle Werte aus der Benutzertabelle abgerufen, in der ein Vornamen gesetzt ist.

Für die Liste können Sie einfach durch diese Ergebnisse iterieren, es ist ziemlich einfach, das zu tun. Das einzige, was Sie tun müssen, ist, dass die Überschriften richtig funktionieren. Wenn Sie die Überschrift speichern und dann einen Vergleich zwischen Groß- und Kleinschreibung vornehmen, sollte dies ziemlich einfach sein. Zum Beispiel (Pseudocode):

 $cur_first_letter = substr( $first_name, 0, 1 ); if( strtoupper( $cur_first_letter ) != strtoupper( $prev_first_letter ) ) { // output header for strtoupper( $cur_first_letter ) } $prev_first_letter = $cur_first_letter; 

Hinweis: Das SQL ist getestet, das PHP ist nicht (offensichtlich, da es Pseudocode ist).

@ m0r7if3r lieferte die richtige Antwort. Um einem anderen, der sich mit diesem Thema befasst, ein direkt verwendbares Snippet zur Verfügung zu stellen, habe ich am Ende folgendes verwendet.

 $wp_users = $wpdb->get_results(" SELECT users.*, meta.meta_value FROM $wpdb->users AS users LEFT JOIN $wpdb->usermeta AS meta ON users.ID = meta.user_id WHERE meta.meta_key = 'first_name' AND meta.meta_value != '' ORDER BY meta.meta_value ASC "); foreach ($wp_users as $wp_user) : $cur_first_letter = substr( $wp_user->meta_value, 0, 1 ); if( strtoupper( $cur_first_letter ) != strtoupper( $prev_first_letter ) ) { echo "

$cur_first_letter

"; } echo "
  • $wp_user->meta_value
  • "; $prev_first_letter = $cur_first_letter; endforeach;