Obtener el rol actual de un usuario en WordPress

En muchas ocasiones, cuando estás desarrollando un theme, un plugin para WordPress o directamente un código para un proyecto propio o de un cliente, necesitas conocer el rol actual del usuario que tiene iniciada la sesión.

¿Por qué? Se me ocurren multitud de situaciones pero así algunas recientes:

  • En una tienda online de electrónica distinguen clientes normales WooCommerce (customers) de otro rol creado ex-professo para un desarrollo llamado mayorista y en ocasiones necesitamos  ver qué tipo de usuario es porque el mayorista tiene algunas ventajas
  • En una agencia de viajes con área privada, necesitaban distinguir el rol de administrador del de usuario logueado
  • En una tienda online, ciertos roles creados a medida tienen a la vista una serie de botones que otros no tienen

Y como esto… miles de casuísticas que os pueden venir. Os dejo la función y os la comento como siempre:

function cod_get_role_current_user(){
  if( is_user_logged_in() ) {
    $user = wp_get_current_user();
    $role = ( array ) $user->roles;
    return $role[0];
  } 
  else{
    return false;
  }
}

Es bastante rápido:

  • Si el usuario no está logueado se envía falso porque no tiene rol, lógicamente
  • Si está logueado, recogemos el objeto con el usuario actual
  • Guardamos en $role la lista de roles del usuario
  • Devolvemos el primer rol

¿Qué formato de rol se devuelve?  Se devuelve el formato que usa WordPress internamente es decir para «Autor» que es la cadena en español de «Author», se devuelve el «slug» del rol es decir: author. Dos cosas antes de terminar.

¿Por qué roles es un array si un usuario sólo puede tener un rol?

Realmente un usuario por defecto en WordPress sólo puede tener un rol, pero la estructura que lo alberga está preparada para tener varios roles. Es una funcionalidad un poco rara pero realmente esto es válido:

$someone = new WP_User( $user_id );
$someone->add_role( 'role-1' );
$someone->add_role( 'role-2' );

El usuario $someone tendría dos roles: role-1 y role-2 (aparte de los que ya tuviera antes, que para eso se hace add_role.

Otra cosa es que este tipo de maniobras te sirvan porque muchos sólo chequeamos el primer elemento del atributo roles.

¿Hay una forma más sencilla de chequear ciertos roles como el administrador?

Aparte de esta forma, que implica: crear un objeto con el usuario y devolver un elemento de un array, hay otro método más sencillo para ver el usuario activo puede desempeñar una capability. Cada role tiene asignado una serie de capabilities o capacidades. La función es current_user_can y el típico ejemplo chequear si el usuario es administrador, sería llamarla con un capability típico de administrador, como es manage_options:

current_user_can('manage_options')

 1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)

Cargando…

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

Carrito

loader