10

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.
21

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>';

?>
| improve this answer | |
  • 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 May 23 at 22:54
3

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 )
    );
}
| improve this answer | |
2

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'
);
| improve this answer | |
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'); ?>
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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