Ordering users of a specific role by last name

I’m trying to display a list of authors by their last name. I can get the list to display but as yet I don’t seem to be able to order the list by last name. Any help would be greatly appreciated. Josh

<?php
    $args  = array(
    // search only for Authors role
    // order results by display_name
    'orderby' => 'meta_value',
    'meta_key ' => 'last_name',
    'role' => 'guest-teacher'



    // check for two meta_values
    );
    // Create the WP_User_Query object
    $wp_user_query = new WP_User_Query($args);
    // Get the results
    $authors = $wp_user_query->get_results();
    // Check for results
    if (!empty($authors))
    {
        echo '<ul class="permanent">';
        // loop trough each author
        foreach ($authors as $author)
        {
            // get all the user's data
            $author_info = get_userdata($author->ID);
            $url = get_author_posts_url($author->ID);  

    ?>


        <h3><a href="https://wordpress.stackexchange.com/questions/86901/<?php echo $url; ?>"><?php echo $author_info->last_name; ?>         </a></h3>

            <?php
        }
        echo '</ul>';
    } else {

    }
    ?>

2 Answers
2

There is apparently an open ticket about this bug.

Here is a workaround that I tested:

$args  = array(
    'meta_key' => 'last_name',
    'role'     => 'guest-teacher'
);

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

$authors = $wp_user_query->get_results();

Problem with this is that it runs the query twice.

Leave a Comment