Obtenez plusieurs rôles avec get_users
8 réponses
- votes
-
- 2015-11-23
Avance rapide vers WordPress 4.4 -ilprendraen charge l'attribut
role__in
!Il semble que WordPress 4.4estnotre numéro de version chanceux ,carilprenden charge à lafois les attributs
role__in
etrole__not_in
duWP_User_Query
.Donc,pourinclure les rôles abonné , contributeur et auteur ,nouspouvons simplement utiliser:
$users = get_users( [ 'role__in' => [ 'subscriber', 'subscriber', 'author' ] ] );
Découvrez leticket # 22212 pourtoute l'histoire!
Fastforward to WordPress 4.4 - it will support the
role__in
attribute!It looks like WordPress 4.4 is our lucky version number, because it will support both the
role__in
androle__not_in
attributes of theWP_User_Query
class.So to include the subscriber, contributor and author roles, we can simply use:
$users = get_users( [ 'role__in' => [ 'subscriber', 'subscriber', 'author' ] ] );
Check out the ticket #22212 for the whole story!
-
Vous avez été officiellement surnommébirgireV4.4,lanouvelle version améliorée ;-)You have been officially dubbed birgireV4.4, the new and improved version ;-)
- 1
- 2015-11-23
- Pieter Goosen
-
hehe cool,ça ressemble aussi à unemarque de vodkapremium ([wiki] (https://en.wikipedia.org/wiki/V44_ (vodka))) ;-) @PieterGoosenhehe cool, that sounds also like a premium vodka brand ([wiki](https://en.wikipedia.org/wiki/V44_(vodka))) ;-) @PieterGoosen
- 1
- 2015-11-23
- birgire
-
- 2013-02-24
Vouspouvez également lefaire via un seul appel à
get_users
ouen utilisant une seuleWP_User_Query
en utilisant l'argumentmeta_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' ) ) ) );
La
meta_query
esttirée de lafaçon dontWP_User_Query
gère leparamètrerole
,si cela vousintéresse.You can also do this via a single call to
get_users
or using a singleWP_User_Query
by making use of themeta_query
argument: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' ) ) ) );
The
meta_query
is pulled from howWP_User_Query
handles therole
parameter, if you're interested.-
@ Andy-Adams Mercipour lepartage.Celane semble afficher *tous * les rôles quepourmoi.Celafonctionne-t-iltoujourspour vous?@Andy-Adams Thanks for sharing. This only seems to display *all* the roles for me. Is this still working for you?
- 0
- 2013-07-25
- helgatheviking
-
@helgatheviking Quels rôles comparez-vousen particulier?Celapeut dépendre desnoms de rôle.@helgatheviking What roles are you comparing, specifically? It could depend on what the role names are.
- 0
- 2013-07-25
- Andy Adams
-
@AndyAdams J'essaie d'intégrer cela dansmonplugin Simple User Listing,doncj'essaye de lefairefonctionnerpourn'importe quelle combinaison de rôles.Surmon site local,j'aiessayé l'administrateuret l'éditeur,maisen parcourant les résultats,tous les autres rôles sonttoujoursinclus.@AndyAdams I'm trying to work this into my Simple User Listing plugin, so I'm trying to make it work for any combination of roles. On my local site, I've tried administrator and editor, but looping through the results all the other roles are still included.
- 0
- 2013-07-25
- helgatheviking
-
Jepourrais recommander d'utiliser leplugin Debug Queriespour voir quelle requête SQLestgénérée.Souvent,celam'aide à comprendrepourquoij'obtiens des résultatsinattendus.http://wordpress.org/plugins/debug-queries/I might recommend using the Debug Queries plugin to see what SQL query is being generated. A lot of times this helps me figure out why I'm getting unexpected results. http://wordpress.org/plugins/debug-queries/
- 0
- 2013-07-26
- Andy Adams
-
- 2012-01-21
J'ai réussi à résoudre ceproblèmeen utilisant cettefonction:
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; }
Ensuite,dansmonthème,je peuxfaire ceci:
$users_array = get_clients();
I managed to solve this by using this function:
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; }
Then in my theme I can do this:
$users_array = get_clients();
-
C'est lameilleure option quej'ai rencontrée.Merci.This is the best option I have come across. Thanks.
- 1
- 2012-10-12
- Jake
-
@blogjunkie Curieux,mais à quelpoint cetriest-ilefficace?@blogjunkie Curious, but how well does this sort?
- 0
- 2013-07-25
- helgatheviking
-
- 2013-08-29
$users = array_merge( get_users('role=subscriber'), get_users('role=contributor') );
Puisque
get_users()
renvoie untableau d'utilisateurs qui correspondent à la chaîne de requête donnéeen paramètre.Exécutez simplement la requêteget_users()
pour chaque rôle que vous souhaitez séparémentet fusionnez les résultats.Vouspouvezensuiteparcourir$users
de lamêmemanière que vous leferiez autrement.$users = array_merge( get_users('role=subscriber'), get_users('role=contributor') );
Since
get_users()
returns an array of users that match the query string given as a param. Just run theget_users()
query for every role you want separately and merge the results. You can then loop through$users
the same way you would have otherwise.-
Pouvez-vous s'il vousplaîtfournirplus d'informationsexpliquantpourquoi cela résout leproblème?Can you please provide more information explaining why this solves the problem?
- 1
- 2013-08-29
- GhostToast
-
J'ai édité la réponse originalepourmieuxexpliquerpourquoi celafonctionne.I edited the original answer to better explain why it works.
- 0
- 2013-08-31
- ksloan
-
J'ai utilisé ceci comme `$ users=array_merge (get_users (array ('role'=> 'RoleOne','fields'=> 'ID')),get_users (array ('role'=> 'RoleTwo','fields'=> 'ID'))); `,et cela afonctionné un régal.Merci!I used this as `$users = array_merge( get_users( array('role' => 'RoleOne' ,'fields' => 'ID') ), get_users( array('role' => 'RoleTwo' ,'fields' => 'ID') ));`, and it worked a treat. Thanks!
- 0
- 2015-09-02
- Guit4eva
-
- 2014-03-06
Leproblème avec l'utilisation de
array_merge
est que vousne pouvezpas utiliser lapagination. J'aimebeaucoup la solution de @Andy Adams,mais si vous recherchez sur denombreux rôles,l'utilisation de saméta-requête setraduirapar une requête très lente (eninterne,unnouveau codeINNER JOIN >pour chaqueméta-requête).
Ma solutionest d'utiliser uneméta-requête d'expression régulière:
& lt;?php global $ wpdb; $blog_id=get_current_blog_id (); $ roles=array ('éditeur','administrateur'); $meta_query=tableau ( 'clé'=> $ wpdb- >get_blog_prefix ($id_blog). 'capacités', 'valeur' => '"('.implode ('|',array_map ('preg_quote',$ roles)). ')"', 'comparer'=> «REGEXP» ); $ user_query=new WP_User_Query (tableau ( 'meta_query'=tableau ($meta_query) )); ? >
Celagénère une requête qui ressemble à quelque chose comme:
tableau ( 'meta_query'=>tableau ( tableau ( 'clé'=> 'wp_capabilities' 'valeur' => '"(éditeur| administrateur)"' 'comparer'=> «REGEXP» ) ) );
The problem with using
array_merge
is that you can't use pagination. I really like @Andy Adams's solution, but if you're searching on many roles, using his meta query will result in a very slow query (internally it does a newINNER JOIN
for each meta query).My solution is to use a regular expression meta query:
<?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) )); ?>
This generates a query that looks something like:
array( 'meta_query' => array( array( 'key' => 'wp_capabilities' 'value' => '"(editor|administrator)"' 'compare' => 'REGEXP' ) ) );
-
- 2014-01-31
Vouspouvez simplementfusionnerplus de résultats de requêtes d'utilisateurs.Supposons que vous souhaitiezinclure à lafois les rôles
Author
etEditor
.Définissez la requêtepour chaque cas,puis utilisez array_merge pour consolideren un seultableau.$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";
You could simply merge more user query results. Let's say you want to include both
Author
andEditor
roles. Define the query for each case then use array_merge to consolidate into a single array.$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";
-
- 2012-01-18
Tous lesparamètres de lafonction get_users sontfacultatifs.Si vousne spécifiez rien,vous obtiendrez untableau contenant des objets correspondant à chaque utilisateur dublog actuel,y compris ceux avec des rôlespersonnalisés.
All the parameters from the function get_users are optional. If you specify nothing you will get an array that contains objects corresponding to each and every user of the current blog, including ones with custom roles.
-
- 2017-02-06
<?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"; } ?>
<?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"; } ?>
J'ai un code comme celui-ci:
Je souhaite obtenirplus de rôleset inclure également
contributor
,author
et certains rôlespersonnalisés quej'ai créés avec leplugin Role Scoper,parexempleManager
,etc. Avez-vous desidées sur lafaçon dontje peuxfaire cela avecget_users
?Merci