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

RedSys para Contact Form 7 ahora muestra el justificante y el motivo del rechazo en la página de gracias

Ya está disponible la versión 2.2 de Contact Form 7 – Integración con RedSys, y…

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

Pagos recurrentes en Contact Form 7: suscripciones con RedSys, paso a paso

Hasta ahora, la integración de Contact Form 7 con RedSys solo sabía cobrar pagos únicos:…

hace % días

Cuotas personalizadas con RedSys

El pago fraccionado de RedSys para WooCommerce lleva un tiempo permitiendo dividir el precio de…

hace % días

Contact Form 7 – Integración con RedSys ya habla catalán, gallego y euskera

Ya está disponible la versión 1.24 de Contact Form 7 - Integración con RedSys, y…

hace % días

Calendario de pagos a medida en WooCommerce Subscriptions: cobra en las fechas que tú decidas

Hasta ahora, cobrar una suscripción en WooCommerce significaba aceptar una regla muy simple: eliges un…

hace % días