Sin categoría

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')

 Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.

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

Francisco Javier Carazo Gil

Entradas recientes

Checkout seguro: cobra sin perder conversiones

Configura un checkout seguro en WordPress y WooCommerce para proteger pagos, reducir errores de integración…

hace % días

Checkout seguro: cobra sin perder conversiones

Configura un checkout seguro en WordPress y WooCommerce para proteger pagos, reducir errores de integración…

hace % días

¿Qué aporta la integración de Bizum y métodos similares en el proceso de pago?

El comercio electrónico español, que se encuentra en pleno crecimiento y transformación, vive actualmente un…

hace % días

Mejores addons para suscripciones WooCommerce

Compara los mejores addons para suscripciones WooCommerce y elige pagos, membresías y automatizaciones compatibles con…

hace % días

Mejores addons para suscripciones WooCommerce

Compara los mejores addons para suscripciones WooCommerce y elige pagos, membresías y automatizaciones compatibles con…

hace % días

Desarrollo de plugins a medida WordPress

El desarrollo de plugins a medida WordPress resuelve pagos, reservas y flujos propios con integración…

hace % días