18

How can I get a list of all users that are in WordPress by their role or capabilities?

For example:

  • Display all subscribers list in WordPress.
  • Display all authors list in WordPress.
  • Display all editors list in WordPress.

4 Answers 4

35

There may be some different way to do that, but most proper way to do that is following.

<?php

$args = array(
    'role'    => 'Your desired role goes here.',
    'orderby' => 'user_nicename',
    'order'   => 'ASC'
);
$users = get_users( $args );

echo '<ul>';
foreach ( $users as $user ) {
    echo '<li>' . esc_html( $user->display_name ) . '[' . esc_html( $user->user_email ) . ']</li>';
}
echo '</ul>';

?>
1
  • Just wanted to add (since it took me a while to figure out): for anyone trying to use this within a shortcode (where you need to return instead of echo), you can follow the example here to use output buffering.
    – Jon Fergus
    Commented May 23, 2020 at 22:54
4

Here the simple approach to grouping roles.

$wp_roles = wp_roles();
$result   = count_users();

foreach ( $result['avail_roles'] as $role => $count )
{
    if ( 0 == $count )
        continue; //pass role none

    $args = array(
        'role' => $role
    );

    $users = get_users( $args );
    $user  = array();
    for ( $i = 0; $i < $count ; $i++ )
        $user[] = esc_html( $users[ $i ]->display_name ); //show display name

    //output
    echo wp_sprintf( '<h2>%1$s</h2><ul><li>%2$s</li></ul>',
        esc_html( $wp_roles->role_names[ $role ] ),
        implode( '</li><li>', $user )
    );
}
4

When you find users with Ultimate Member Plugin Roles, You have to add "um_" to your role value. For example, you created the role name "Client" in Ultimate Membership Plugin, then $args would be

$args = array(
    'role'    => 'um_client',
    'orderby' => 'user_nicename',
    'order'   => 'ASC'
);
0

Expanding on Raja's answer you could also write a helper function that handles this for you:

<?php
# This goes in functions.php
function get_users_by_role($role, $orderby, $order) {
    $args = array(
        'role'    => $role,
        'orderby' => $orderby,
        'order'   => $order
    );

    $users = get_users( $args );

    return $users;
}
?>

Then to get users by a specific role you can simply do:

<?php $users = get_users_by_role('Your role', 'user_nicename', 'ASC'); ?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.