Come posso ottenere un elenco di utenti in base al loro ruolo?
Come posso ottenere un elenco di tutti gli utenti in WordPress filtrandoli per ruolo o capacità?
Per esempio:
- Visualizzare l'
elenco di tutti gli iscritti
in WordPress. - Visualizzare l'
elenco di tutti gli autori
in WordPress. - Visualizzare l'
elenco di tutti gli editor
in WordPress.

Potrebbero esserci diversi modi per farlo, ma il modo più corretto è il seguente.
<?php
$args = array(
'role' => 'Inserisci qui il ruolo desiderato.',
'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>';
?>

Volevo solo aggiungere (dato che ci ho messo un po' a capirlo): per chiunque stia cercando di usare questo all'interno di uno shortcode (dove è necessario restituire invece di echo), puoi seguire l'esempio qui per utilizzare l'output buffering.

Ecco l'approccio semplice per raggruppare i ruoli.
$wp_roles = wp_roles();
$result = count_users();
foreach ( $result['avail_roles'] as $role => $count )
{
if ( 0 == $count )
continue; //salta il ruolo vuoto
$args = array(
'role' => $role
);
$users = get_users( $args );
$user = array();
for ( $i = 0; $i < $count ; $i++ )
$user[] = esc_html( $users[ $i ]->display_name ); //mostra il nome visualizzato
//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 )
);
}

Quando trovi utenti con ruoli del plugin Ultimate Member, devi aggiungere "um_" al valore del ruolo. Ad esempio, se hai creato il nome del ruolo "Cliente" nel plugin Ultimate Membership, allora $args sarebbe:
$args = array(
'role' => 'um_client',
'orderby' => 'user_nicename',
'order' => 'ASC'
);

Ampliando la risposta di Raja, potresti anche scrivere una funzione helper che gestisca questo per te:
<?php
# Questo va nel file functions.php
function get_users_by_role($role, $orderby, $order) {
$args = array(
'role' => $role,
'orderby' => $orderby,
'order' => $order
);
$users = get_users( $args );
return $users;
}
?>
Quindi per ottenere gli utenti di un ruolo specifico puoi semplicemente fare:
<?php $users = get_users_by_role('Il tuo ruolo', 'user_nicename', 'ASC'); ?>
