Programación

Obtener el nombre de un rol en WordPress a través de su slug

Los roles y capacidades son las bases en la que se basa el sistema de permisos en WordPress. Cuando un usuario inicia sesión, su rol hará que pueda hacer o no ciertas cosas, o que pueda ver o no otras. Nadie espera que un usuario sin loguera tenga acceso a ver pedidos de otro o que un cliente tenga acceso a cambiar el tema. Por daros un par de ejemplos.

Roles y capacidades

De forma breve podríamos resumirlo como que:

  • A cada usuario se le asigna un rol (aunque la estructura está preparada para asignar a más de uno pero no se usa)
  • Cada rol tiene una serie de capacidades asociadas
  • Con un plugin como User Role Editor podéis ver esto y con cuidado, tocar hasta las capacidades de cada rol

Los plugins o el tema luego consultan sobre si un determinado usuario puede hacer algo (una capacidad en concreto) con la función current_user_can( $capacidad ) que nos dirá si el usuario puede tiene derecho a hacer esa capacidad o no. Así de esta forma, orientamos el flujo de programa y damos seguridad a nuestros desarrollos. Por ejemplo, si un usuario no puede crear usuarios, no podrá importarlos, en nuestro plugin para importar y exportar usuarios y clientes.

El caso es que un rol está definido de forma única como tantas otras estructuras en WordPress por el slug. El slug es un identificador único, de tipo cadena, y para que os hagáis una idea es:

  • administrator para el administrador
  • customer para el cliente
  • editor para el editor
  • etc.

Como veis el slug es algo que no se traduce y que al ser un identificador, actúa como clave foránea para hacer relaciones. De esta forma, el objeto usuario lo que guarda es el slug del rol al que está asignado.

Convertir slug en nombres de rol

Lo que ocurre, es que cuando estás mostrando a un usuario un rol, el usuario espera ver «Administrador» y no «administrator». Si estás haciendo código para WordPress y obtienes los roles de usuario, por ejemplo así:

$user = new WP_User( $order->get_customer_id() ); // estoy recorriendo pedidos en WooCommerce y creo un objeto usuario con el cliente del pedido
var_export( $user->roles ); // muestro el array de roles por pantalla
var_export( $user->roles[0] ); // muestro el rol del usuario, al usarse solo un rol por usuario normalmente, accederemos a la posición 0 del array

Verás que lo que te devuelve es el slug, así que para obtener el nombre, podéis hacer lo siguiente:

function get_role_name( $role_slug ){
        global $wp_roles;
        return ( isset( $wp_roles->roles[ $role_slug ] ) ) ? $wp_roles->roles[ $role_slug ]['name'] : '';
}

Esta función os devolverá para un slug dado, su nombre asociado. ¿Cómo?

  • Cargamos el objeto global $wp_roles que tiene información de todos los roles que hay cargados
  • El listado de roles lo tiene en el atributo $wp_roles->roles que tiene forma de array indexado por los slugs de los roles
  • Vemos si está definido y si lo está, devolvemos el nombre, que está dentro de rol como un dato más del array

Como los roles son traducibles, podéis usar la función translate_user_role( $nombre_role ) que recibe el nombre del rol y lo devuelve traducido. No probéis a pasarle el slug, porque en este caso espera el nombre del rol.

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 acepta preautorizaciones

RedSys aparte de los pagos normales, llamados autorizaciones, acepta una variedad de operaciones: desde autorizaciones…

hace % días

Ordenar productos de forma diferente por cada categoría en WooCommerce

WooCommerce permite ordenar los productos de una forma nativa, para poder presentar primero los que…

hace % días

Evitar que se instalen los temas por defecto de WordPress cada vez que actualizas el núcleo

Cada vez que hay una actualización grande del núcleo WordPress, por defecto WordPress te instala…

hace % días

Pantalla LCD: ¿qué es?

Una pantalla LCD es una pantalla delgada y hecha de cristal líquido. Se usa en…

hace % días

Flujos de pago con Gravity Flow y RedSys

De todos los plugins que existen para Gravity Forms, que son numerosos porque la propia…

hace % días

CMS, ¿Qué es y qué ventajas tiene?

Un CMS, como WordPress, facilita la creación y gestión de contenido en la web, sin…

hace % días