¿Cómo puedo obtener una lista de usuarios por su rol?

4 mar 2016, 07:10:49
Vistas: 73K
Votos: 20

¿Cómo puedo obtener una lista de todos los usuarios que están en WordPress por su rol o capacidades?

Por ejemplo:

  • Mostrar lista de todos los suscriptores en WordPress.
  • Mostrar lista de todos los autores en WordPress.
  • Mostrar lista de todos los editores en WordPress.
0
Todas las respuestas a la pregunta 4
1
36

Puede haber diferentes formas de hacerlo, pero la forma más adecuada es la siguiente.

<?php

$args = array(
    'role'    => 'Tu rol deseado va aquí.',
    '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>';

?>
4 mar 2016 07:10:49
Comentarios

Solo quería agregar (ya que me tomó un tiempo darme cuenta): para cualquiera que intente usar esto dentro de un shortcode (donde necesitas retornar en lugar de hacer echo), puedes seguir el ejemplo aquí para usar el almacenamiento en búfer de salida.

Jon Fergus Jon Fergus
24 may 2020 01:54:48
0

Aquí el enfoque simple para agrupar roles.

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

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

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

    $users = get_users( $args );
    $user  = array();
    for ( $i = 0; $i < $count ; $i++ )
        $user[] = esc_html( $users[ $i ]->display_name ); //mostrar nombre para mostrar

    //salida
    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 mar 2016 15:37:57
0

Cuando encuentres usuarios con roles del Plugin Ultimate Member, debes agregar "um_" al valor del rol. Por ejemplo, si creaste el nombre de rol "Cliente" en el Plugin Ultimate Membership, entonces $args sería:

$args = array(
    'role'    => 'um_cliente',
    'orderby' => 'user_nicename',
    'order'   => 'ASC'
);
29 feb 2020 08:17:22
0

Ampliando la respuesta de Raja, también podrías escribir una función auxiliar que maneje esto por ti:

<?php
# Esto va en functions.php
function get_users_by_role($role, $orderby, $order) {
    $args = array(
        'role'    => $role,
        'orderby' => $orderby,
        'order'   => $order
    );

    $users = get_users( $args );

    return $users;
}
?>

Luego, para obtener usuarios por un rol específico, simplemente puedes hacer:

<?php $users = get_users_by_role('Tu rol', 'user_nicename', 'ASC'); ?>
9 jul 2019 14:43:09