web-dev-qa-db-ja.com

Get_users関数に2つの役割を渡せますか?

ロールアカデミックおよび学生のユーザーを取得したいです。私は以下のコードを使用してみました(ロールの配列を渡しますが、すべてのユーザーが表示されているので、明らかに機能していません)。

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

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

Get_users関数を使って実行することは不可能だと思います。 Codex が意味するものから、配列をrole引数に渡すことはできません。しかし、その制限から外れるようにコーディングするのはかなり簡単なはずです。

これを試して:

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
}

引数field = all_with_metaを使用してユーザーに問い合わせるのは非常に強力で、WPはユーザーオブジェクトに対してprint_rを実行しても表示されないインデックスをマッピングするようです。そのため、上記のように姓または名を使用してそれらを並べ替えることができます(私は実際には 私の古い回答 からコードを取得しました)。

どうなるか教えてください。

2
Tomas Buteler

役割をループして結果をマージします。これは任意の数の役割で機能します。

$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