¿Cómo verificar si un usuario está en un rol específico?

44

Tengo un requisito bastante específico para mostrar un texto diferente en una etiqueta de campo en la página de perfil de usuario en función de la función del usuario actual. Parece que no puedo averiguar cómo comprobar si el uso actual es un "autor".

Estoy buscando una función como:

is_user_in_role($user, "author");

Me imagino que esto es bastante simple, pero he buscado durante mucho tiempo sin una respuesta, así que pensé en publicarlo aquí.

    
pregunta jessegavin 08.12.2010 - 16:47

4 respuestas

86

Si solo necesita esto para el usuario actual current_user_can() acepta ambos roles y capacidades.

ACTUALIZACIÓN : ya no se garantiza que el pasar un nombre de función a current_user_can() funcione correctamente (consulte # 22624 ). En su lugar, es posible que desee comprobar el rol del usuario:

$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
    //The user has the "author" role
}
    
respondido por el Rarst 08.12.2010 - 16:54
9

Estaba buscando una manera de obtener el rol de un usuario usando la ID del usuario. Esto es lo que se me ocurrió:

function get_user_roles_by_user_id( $user_id ) {
    $user = get_userdata( $user_id );
    return empty( $user ) ? array() : $user->roles;
}

Entonces, una función is_user_in_role() podría implementarse así:

function is_user_in_role( $user_id, $role  ) {
    return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
    
respondido por el Stephen M. Harris 11.06.2012 - 16:18
1

También puedes crear un nuevo 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;
}

No estoy seguro de en qué versión get_user_roles_by_user_id se eliminó, pero ya no es una función disponible.

    
respondido por el sMyles 16.11.2017 - 01:44
0

Aquí hay una función que acepta un usuario y un rol para una mayor flexibilidad:

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
}
    
respondido por el Ben 29.11.2017 - 00:05

Lea otras preguntas en las etiquetas