私はこのようないくつかのコードを持っています:
$ 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;
もっと多くのロールを取得したいですし、contributor
、author
、そしてRole Scoperプラグインで作成したいくつかのカスタムロールも含めます。 Manager
などget_users
を使ってこれを実現する方法を教えてください。
ありがとう
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_query
はWP_User_Query
がrole
パラメータを処理する方法から引き出されます。
role__in
属性をサポートします!WordPress 4.4は、私たちの ラッキーバージョン番号 のようです。これは、role__in
クラスのrole__not_in
およびWP_User_Query
属性の両方をサポートするためです。
したがって、購読者、寄稿者、および作者の役割を含めるには、単純に次のようにします。
$users = get_users( [ 'role__in' => [ 'subscriber', 'subscriber', 'author' ] ] );
ストーリー全体のチケット #22212 をチェックしてください。
私はこの機能を使用してこれを解決することができました:
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();
$users = array_merge( get_users('role=subscriber'), get_users('role=contributor') );
get_users()
は、引数として与えられたクエリ文字列と一致するユーザーの配列を返します。必要なすべての役割に対してget_users()
クエリを別々に実行して結果をマージするだけです。それ以外の場合と同じ方法で$users
をループ処理できます。
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'
)
)
);
もっと多くのユーザークエリ結果をマージすることができます。 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";
<?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";
}
?>
関数 get_users からのすべてのパラメーターはオプションです。何も指定しないと、現在のブログの各ユーザーに対応するオブジェクトを含む配列が得られます。これにはカスタムロールを持つユーザーも含まれます。