web-dev-qa-db-fra.com

Puis-je transmettre deux rôles à la fonction get_users?

Je veux obtenir les utilisateurs du rôle universitaire et étudiant. J'ai essayé d'utiliser le code ci-dessous (transmission d'un tableau de rôles, mais tous les utilisateurs sont affichés, donc cela ne fonctionne clairement pas.

$roles=array('academic','student');
$args =array('role'=>$roles);
$users=get_users( $args );

foreach ($users as $user) {
    echo '<li>' . $user->user_email . '</li>';
}
2
Claire

Je ne pense pas qu'il soit possible de le faire avec la fonction get_users. D'après ce que Codex implique, vous ne pouvez pas passer de tableaux à l'argument de rôle. Mais il devrait être assez facile de vous écarter de cette limite.

Essaye ça:

function filter_two_roles($user) {
    $roles = array('academic','student');
    return in_array($user->roles[0], $roles);
}

$users = get_users('fields=all_with_meta');
// Sort by last name
usort($users, create_function('$a, $b', 'if($a->last_name == $b->last_name) { return 0;} return ($a->last_name > $b->last_name) ? 1 : -1;'));
// Iterate through users, filtering out the ones which don't have the roles we want 
foreach(array_filter($users, 'filter_two_roles') as $user) {
    // Your code
}

Demander aux utilisateurs avec l'argument field = all_with_meta est très puissant et WP semble mapper des index qui ne sont même pas affichés lors de l'exécution d'un print_r sur l'objet utilisateur. C’est pourquoi nous pouvons les trier par prénom ou nom, comme indiqué ci-dessus (j’ai en fait pris le code dans une réponse plus ancienne ).

Tiens nous au courant de comment ça se passe?

2
Tomas Buteler

parcourez les rôles et fusionnez les résultats ... cela fonctionnera avec un nombre quelconque de rôles.

$roles = array('academic','student');
$users = array();
foreach ($roles as $role) {
    $args = array('role'=>$role);
    $usersofrole = get_users($args);
    $users = array_merge($usersofrole,$users);
}

foreach ($users as $user) {
    echo '<li>' . $user->user_email . '</li>';
}
1
majick