WordPress – How to get all Author (or all User) Names and their associated ID’s?

At the moment I am doing the following to get a list of all authors:

$authors = wp_list_authors('html=0&style=none&echo=0&exclude_admin=1&optioncount=0&show_fullname=1&hide_empty=1&orderby=name&order=ASC'); 

$authors_array = explode(',', $authors);

for ($j = 0; $j < count($authors_array); $j++)
{
    echo '<li id="">'.$authors_array[$j].'</li>';
}

How can I also get the user’s id?

Read More

I have looked everywhere and I can’t think of a way to get all authors and another bit of meta data.

Related posts

Leave a Reply

2 comments

  1. Another way I found was to do the following (swear I couldn’t find anything like this earlier):

    $authors = get_users('role=author&orderby=display_name&order=ASC');
    
    foreach ($authors as $author) {
        if (count_user_posts($author->ID) > 0) {
           echo '<li id="' . $author->ID . '">' . $author->display_name . '</li>';
        }
    }
    
  2. You can either override the function in functions.php or create a new function based on the original. Looking at the code it’s easy enough to just include the $author_id in the foreach loop.

    Code for original is here

    Try this and make sure you add the new parameter (includeauthorid) into the function call…

    $authors = wp_list_authors('html=0&style=none&echo=0&exclude_admin=1&optioncount=0&show_fullname=1&hide_empty=1&orderby=name&order=ASC&includeauthorid=1');  
    

    new function – ps I wouldn’t recommend changing the original. Just put this in functions.php.

    function wp_list_authors($args = '') {
    global $wpdb;
    
    $defaults = array(
        'orderby' => 'name', 'order' => 'ASC', 'number' => '',
        'optioncount' => false, 'exclude_admin' => true,
        'show_fullname' => false, 'hide_empty' => true,
        'feed' => '', 'feed_image' => '', 'feed_type' => '', 'echo' => true,
        'style' => 'list', 'html' => true,
        'includeauthorid' => false 
    );
    
    $args = wp_parse_args( $args, $defaults );
    extract( $args, EXTR_SKIP );
    
    $return = '';
    
    $query_args = wp_array_slice_assoc( $args, array( 'orderby', 'order', 'number' ) );
    $query_args['fields'] = 'ids';
    $authors = get_users( $query_args );
    
    $author_count = array();
    foreach ( (array) $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql( 'post' ) . " GROUP BY post_author") as $row )
        $author_count[$row->post_author] = $row->count;
    
    foreach ( $authors as $author_id ) {
        $author = get_userdata( $author_id );
    
        if ( $exclude_admin && 'admin' == $author->display_name )
            continue;
    
        $posts = isset( $author_count[$author->ID] ) ? $author_count[$author->ID] : 0;
    
        if ( !$posts && $hide_empty )
            continue;
    
        $link = '';
    
        if ( $show_fullname && $author->first_name && $author->last_name )
            $name = "$author->first_name $author->last_name";
        else
            $name = $author->display_name;
    
        if( $includeauthorid)
            $name .= ' ('. $author_id .')';
    
        if ( !$html ) {
            $return .= $name . ', ';
    
            continue; // No need to go further to process HTML.
        }
    
        if ( 'list' == $style ) {
            $return .= '<li>';
        }
    
        $link = '<a href="' . get_author_posts_url( $author->ID, $author->user_nicename ) . '" title="' . esc_attr( sprintf(__("Posts by %s"), $author->display_name) ) . '">' . $name . '</a>';
    
        if ( !empty( $feed_image ) || !empty( $feed ) ) {
            $link .= ' ';
            if ( empty( $feed_image ) ) {
                $link .= '(';
            }
    
            $link .= '<a href="' . get_author_feed_link( $author->ID ) . '"';
    
            $alt = $title = '';
            if ( !empty( $feed ) ) {
                $title = ' title="' . esc_attr( $feed ) . '"';
                $alt = ' alt="' . esc_attr( $feed ) . '"';
                $name = $feed;
                $link .= $title;
            }
    
            $link .= '>';
    
            if ( !empty( $feed_image ) )
                $link .= '<img src="' . esc_url( $feed_image ) . '" style="border: none;"' . $alt . $title . ' />';
            else
                $link .= $name;
    
            $link .= '</a>';
    
            if ( empty( $feed_image ) )
                $link .= ')';
        }
    
        if ( $optioncount )
            $link .= ' ('. $posts . ')';
    
        $return .= $link;
        $return .= ( 'list' == $style ) ? '</li>' : ', ';
    }
    
    $return = rtrim($return, ', ');
    
    if ( !$echo )
        return $return;
    
    echo $return;
    

    }