PHP/SQL/Wordpress: Group a user list by alphabet

Posted by rayne on Stack Overflow See other posts from Stack Overflow or by rayne
Published on 2010-04-13T12:23:43Z Indexed on 2010/04/13 14:33 UTC
Read the original article Hit count: 408

Filed under:
|
|

I want to create a (fairly big) Wordpress user index with the users categorized alphabetically, like this:

A

  • Amy
  • Adam

B

  • Bernard
  • Bianca

and so on.

I've created a custom Wordpress query which works fine for this, except for one problem: It also displays "empty" letters, letters where there aren't any users whose name begins with that letter. I'd be glad if you could help me fix this code so that it only displays the letter if there's actually a user with a name of that letter :) I've tried my luck by checking how many results there are for that letter, but somehow that's not working.

(FYI, I use the user photo plugin and only want to show users in the list who have an approved picture, hence the stuff in the SQL query).

<?php
    $alphabet = range('A', 'Z');
    foreach ($alphabet as $letter) {
      $user_count = $wpdb->get_results("SELECT COUNT(*) FROM wp_users WHERE display_name LIKE '".$letter."%' ORDER BY display_name ASC");
      if ($user_count > 0) {
        $user_row = $wpdb->get_results("SELECT wp_users.user_login, wp_users.display_name 
        FROM wp_users, wp_usermeta
        WHERE wp_users.display_name LIKE '".$letter."%' 
        AND wp_usermeta.meta_key = 'userphoto_approvalstatus'
        AND wp_usermeta.meta_value = '2'
        AND wp_usermeta.user_id = wp_users.ID
        ORDER BY wp_users.display_name ASC");
        echo '<li class="letter">'.$letter.'';
        echo '<ul>';
        foreach ($user_row as $user) { 
          echo '<li><a href="/author/'.$user->user_login.'">'.$user->display_name.'</a></li>';
        }
      echo '</ul></li>';
      }                     
    }
    ?>

Thanks in advance!

© Stack Overflow or respective owner

Related posts about Wordpress

Related posts about php