web-dev-qa-db-ja.com

Get_usersで複数の役割を取得する

私はこのようないくつかのコードを持っています:

 $ query_args = array(); 
 $ query_args ['fields'] =配列( 'ID'、 'display_name'); 
 $ query_args ['role'] = ' '; 
 $ users = get_users($ query_args); 
 foreach($ usersを$ userとして)$ users_array [$ user-> ID] = $ user-> display_name; 

もっと多くのロールを取得したいですし、contributorauthor、そしてRole Scoperプラグインで作成したいくつかのカスタムロールも含めます。 Managerなどget_usersを使ってこれを実現する方法を教えてください。

ありがとう

11
blogjunkie

get_usersを1回呼び出すか、WP_User_Query引数を使用して1つのmeta_queryを使用することによってもこれを行うことができます。

global $wpdb;
$blog_id = get_current_blog_id();

$user_query = new WP_User_Query( array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
            'value' => 'role_one',
            'compare' => 'like'
        ),
        array(
            'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
            'value' => 'role_two',
            'compare' => 'like'
        )
    )
) );

興味があれば、meta_queryWP_User_Queryroleパラメータを処理する方法から引き出されます。

18
Andy Adams

WordPress 4.4への早送り - role__in属性をサポートします!

WordPress 4.4は、私たちの ラッキーバージョン番号 のようです。これは、role__inクラスのrole__not_inおよびWP_User_Query属性の両方をサポートするためです。

したがって、購読者寄稿者、および作者の役割を含めるには、単純に次のようにします。

$users = get_users( [ 'role__in' => [ 'subscriber', 'subscriber', 'author' ] ] );

ストーリー全体のチケット #22212 をチェックしてください。

18
birgire

私はこの機能を使用してこれを解決することができました:

function get_clients() { 

    $users = array();
    $roles = array('subscriber', 'custom_role1', 'custom_role2');

    foreach ($roles as $role) :
        $users_query = new WP_User_Query( array( 
            'fields' => 'all_with_meta', 
            'role' => $role, 
            'orderby' => 'display_name'
            ) );
        $results = $users_query->get_results();
        if ($results) $users = array_merge($users, $results);
    endforeach;

    return $users;
}

それから私のテーマで私はこれを行うことができます:

$users_array = get_clients();
13
blogjunkie
$users = array_merge( get_users('role=subscriber'), get_users('role=contributor') );

get_users()は、引数として与えられたクエリ文字列と一致するユーザーの配列を返します。必要なすべての役割に対してget_users()クエリを別々に実行して結果をマージするだけです。それ以外の場合と同じ方法で$usersをループ処理できます。

4
ksloan

array_mergeを使用する際の問題は、ページ付けを使用できないことです。私は@Andy Adamsのソリューションをとても気に入っていますが、多くのロールを検索している場合、彼のメタクエリを使うと とても遅い クエリになります(内部的には各メタクエリに対して新しいINNER JOINを行います)。

私の解決策は正規表現メタクエリを使うことです:

<?php

global $wpdb;
$blog_id = get_current_blog_id();

$roles = array('editor', 'administrator');
$meta_query = array(
    'key' => $wpdb->get_blog_prefix($blog_id) . 'capabilities',
    'value' => '"(' . implode('|', array_map('preg_quote', $roles)) . ')"',
    'compare' => 'REGEXP'
);
$user_query = new WP_User_Query(array(
    'meta_query' = array($meta_query)
));

?>

これにより、次のようなクエリが生成されます。

array(
    'meta_query' => array(
        array(
            'key' => 'wp_capabilities'
            'value' => '"(editor|administrator)"'
            'compare' => 'REGEXP'
        )
    )
);
3
inxilpro

もっと多くのユーザークエリ結果をマージすることができます。 AuthorロールとEditorロールの両方を含めたいとしましょう。ケースごとにクエリを定義し、次に array_merge を使用して単一の配列に統合します。

$xuser_query = new WP_user_query(array( 'role' => 'Author'));    
$yuser_query = new WP_user_query(array( 'role' => 'Editor'));
$mergedRoles=array_merge($xuser_query->results,$xuser_query->results);

// further on you might want to do some sorting 
// of the resulting array of objects before looping through it:

if (!empty( $mergedRoles->results ) ) {
 foreach ( $mergedRoles->results as $user ) { 
        echo $user->display_name;
      }
 else echo "nada, no users found";
1
pax
<?php 
$xuser_query = new WP_user_query(array( 'role' => 'Author'));    
$yuser_query = new WP_user_query(array( 'role' => 'Editor'));

$mergedRoles=array_merge($xuser_query->results,$xuser_query->results);

// further on you might want to do some sorting 
// of the resulting array of objects before looping through it:

if (!empty( $mergedRoles) ) {

    foreach ( $mergedRoles as $user ) { 
        echo $user->display_name;
    }

} else {
    echo "nada, no users found";
}
?>
0
Charan Dass

関数 get_users からのすべてのパラメーターはオプションです。何も指定しないと、現在のブログの各ユーザーに対応するオブジェクトを含む配列が得られます。これにはカスタムロールを持つユーザーも含まれます。

0
Tomas Buteler