¿Cómo comprobar si un usuario tiene un rol específico?
6 respuestas
- votos
-
- 2010-12-08
Si solo lonecesitaparael usuario actual,
current_user_can()
aceptatanto roles como capacidades.ACTUALIZACIÓN : Yano segarantiza queelpaso de unnombre defunción a
current_user_can()
funcione correctamente (consulte # 22624 ).En su lugar,esposible que desee verificar lafunción del usuario:$user = wp_get_current_user(); if ( in_array( 'author', (array) $user->roles ) ) { //The user has the "author" role }
If you only need this for current user
current_user_can()
accepts both roles and capabilities.UPDATE: Passing a role name to
current_user_can()
is no longer guaranteed to work correctly (see #22624). Instead, you may wish to check user role:$user = wp_get_current_user(); if ( in_array( 'author', (array) $user->roles ) ) { //The user has the "author" role }
-
Sé queestapublicaciónfue respondida hacemuchotiempo,pero si alguien llega aquí ...mire la documentación una vezmáspara current_user_can () -> "Nopase unnombre de rol a current_user_can (),ya queestonoestágarantizadofuncionan correctamente (consulteeln.º 22624). En su lugar,esposible que deseeprobar lafunción de verificación del rol del usuario creadapor AppThemes ".(http://codex.wordpress.org/Function_Reference/current_user_can)I know this post is answered a long time ago but if someone happens to get here... look at the documentation once more for current_user_can() -> "Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly (see #22624). Instead, you may wish to try the check user role function put together by AppThemes." (http://codex.wordpress.org/Function_Reference/current_user_can)
- 10
- 2014-01-28
- bestprogrammerintheworld
-
^ Falta un corcheteen la declaraciónif^ There is a bracket missing in the if statement
- 1
- 2015-06-04
- Aajahid
-
@Aajahideditado :)@Aajahid edited :)
- 1
- 2015-06-04
- Rarst
-
Sino utilizomultisitio,sigoprefiriendo la simplicidad de `current_user_can ('editor')`If not using multisite, I still prefer the simplicity of `current_user_can('editor')`
- 1
- 2020-01-25
- Jules
-
- 2012-06-11
Estababuscando unaforma de obtenerel rol de un usuario usando laidentificación del usuario.Estoes lo que seme ocurrió:
function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; }
Entonces,unafunción
is_user_in_role()
podríaimplementarse así:function is_user_in_role( $user_id, $role ) { return in_array( $role, get_user_roles_by_user_id( $user_id ) ); }
I was looking for a way to get a user's role using the user's id. Here is what I came up with:
function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; }
Then, an
is_user_in_role()
function could be implemented like so:function is_user_in_role( $user_id, $role ) { return in_array( $role, get_user_roles_by_user_id( $user_id ) ); }
-
funcionabien paramípara obtenerelprimer rol asignado a un usuario.works fine for me to get the first role assigned to a user.
- 1
- 2012-10-10
- Q Studio
-
¿Quépasa contodos los roles asignados al usuario?What about all the roles assigned to the user?
- 0
- 2017-04-10
- Sahu V Kumar
-
@Vishal Kumaresto compararátodos los roles asignados al usuario.@Vishal Kumar this will check against all roles assigned to the user.
- 1
- 2017-04-10
- Stephen M. Harris
-
Estafunciónnoexiste,noestoy seguro de siera antigua o qué,pero debe usar la respuesta anterior o la quepubliqué a continuaciónThis function does not exist, not sure if it was just old or what, but you should use the answer above or the one I posted below
- 0
- 2017-11-16
- sMyles
-
- 2017-11-16
Tambiénpuede crear unnuevo objeto de usuario:
$user = new WP_User( $user_id ); if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) { return true; }
Noestoy seguro deen qué versión
get_user_roles_by_user_id
seeliminó,pero yanoes unafunción disponible.You can also just create a new user object:
$user = new WP_User( $user_id ); if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) { return true; }
Not sure what version
get_user_roles_by_user_id
was removed in, but it's no longer an available function.-
Estoes útil cuandotengo que llamar a otrosmétodos de la clase WP_User.This is handy when I have to call other methods of the WP_User class.
- 0
- 2019-09-25
- Justin Waulters
-
- 2017-11-28
Aquí hay unafunción que acepta un usuario y un rolparamayorflexibilidad:
functionmy_has_role ($ usuario,$ rol) { $ roles=$ usuario-> roles; returnin_array ($ rol,(matriz) $ usuario-> roles); } if (my_has_role ($ user,'some_role')) { //hacer cosas }
Here is a function that accepts a user and role for greater flexibility:
function my_has_role($user, $role) { $roles = $user->roles; return in_array($role, (array) $user->roles); } if(my_has_role($user, 'some_role')) { //do stuff }
-
- 2019-10-02
Lasfunciones de llamadaen el objeto de usuario
$user->roles
no devuelventodas lasfunciones.Laforma correcta de averiguar siel usuariotiene unafunción o capacidades la siguiente.(Estofuncionaen la versión de wp 2.0.0 y superior). La siguientefunciónfunciona con laidentificación de usuario;puede obtener laidentificación de usuario actualmediante$current_user_id = get_current_user_id();
/** * Returns true if a user_id has a given role or capability * * @param int $user_id * @param string $role_or_cap Role or Capability * * @return boolean */ function my_has_role($user_id, $role_or_cap) { $u = new \WP_User( $user_id ); //$u->roles Wrong way to do it as in the accepted answer. $roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true ) { return true; } }
Calling roles on User Object
$user->roles
do not return all the roles. The correct way to find if the user has a role or capability is following. (This works in wp version 2.0.0 and greater.) The following function works with user id you can get the current user id by$current_user_id = get_current_user_id();
/** * Returns true if a user_id has a given role or capability * * @param int $user_id * @param string $role_or_cap Role or Capability * * @return boolean */ function my_has_role($user_id, $role_or_cap) { $u = new \WP_User( $user_id ); //$u->roles Wrong way to do it as in the accepted answer. $roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true ) { return true; } }
-
- 2020-07-27
Estaes unapublicación antigua,pero aquí hay unafunción universal quefuncionaen todas las versiones de WordPress.
if(!function_exists('is_user')): function is_user ($role=NULL, $user_id=NULL) { if(empty($user_id)){ $user = wp_get_current_user(); } else { if(is_numeric($user_id) && $user_id == (int)$user_id) { $user = get_user_by('id', (int)$user_id); } else if(is_string($user_id) && $email = sanitize_email($user_id)) { $user = get_user_by('email', $email); } else { return false; } } if(!$user) return false; return in_array( $role, (array)$user->roles, true ) !== false; } endif;
Conestafunciónpuedebuscar usuarios registradospor rol opor ID de usuario/correoelectrónico.También acepta lamatriz de roles de usuario.
This is old post but here is one universal function what working on the all WordPress versions.
if(!function_exists('is_user')): function is_user ($role=NULL, $user_id=NULL) { if(empty($user_id)){ $user = wp_get_current_user(); } else { if(is_numeric($user_id) && $user_id == (int)$user_id) { $user = get_user_by('id', (int)$user_id); } else if(is_string($user_id) && $email = sanitize_email($user_id)) { $user = get_user_by('email', $email); } else { return false; } } if(!$user) return false; return in_array( $role, (array)$user->roles, true ) !== false; } endif;
With this function you can search logged in user by role or by user ID/email. Also accept user roles array.
Tengo un requisitobastanteespecífico demostrartexto diferenteen unaetiqueta de campoen lapágina deperfil de usuario segúnel rol del usuario actual.Parece quenopuedo averiguar cómo comprobar siel uso actuales un "autor".
Estoybuscando unafunción como:
Imagino queestoesbastante simple,pero hebuscado durante demasiadotiempo sin una respuesta,así quepenséen publicarlo aquí.