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.

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