Añadir una clase según el rol de usuario

clase-segun-el-rol-de-usuario
Para un proyecto tenía que hacer cambios estéticos en una web en función al tipo de usuario que accediese a la página. Pensé que una forma sencilla de hacer esto sería tener aplicada en la etiqueta <body> una clase según el rol de usuario. Esto me diría qué rol de usuario estaba conectado en ese momento y aplicaría unos estilos u otros.
 

La idea

La idea me vino porque ya hay una clase que te dice qué plantilla se está usando para la página actual. No podía ser díficil añadir otra clase que indique cual es el rol del usuario activo.
 
Buscando un poco acabé en el github de Jancbeck ( https://gist.github.com/jancbeck/3178689 ). Y ahí encontré una solución bastante sencilla y fácil de aplicar.
 

La solución

El código que nos hace el trabajo de insertar una clase según el rol de usuario es este:
 
if ( is_user_logged_in() ) {
    add_filter('body_class','add_role_to_body');
    add_filter('admin_body_class','add_role_to_body');
}

// añadir rol de usuario en las clases de body
function add_role_to_body($classes) {
    $current_user = newWP_User(get_current_user_id());
    $user_role = array_shift($current_user->roles);
    if (is_admin()) {
        $classes.='role-'.$user_role;
    } else {
        $classes[] = 'role-'.$user_role;
    }
    return $classes;
}

La clase añadida será algo como ‘role-editor’ o ‘role-author’ para editor y autor respectivamente. Se puede deducir con facilidad el resto de clases según los roles o incluso en caso de tener roles personalizados.

Se puede cambiar en el código la palabra role para adaptarlo al proyecto en que se esté usando o la terminología que se prefiera.

 

Lo siguiente es incluir este código en nuestros archivos, lo que podemos hacer de varias formas.

  •  La más habitual es añadirlo al final del archivo functions.php
  •  Yo prefiero ponerlo en un archivo aparte llamado custom_functions.php.
    Este archivo lo pongo dentro de una carpeta inc o includes. Y por último añado un require en functions.php que apunte a ese archivo.
    Expliqué cómo hacerlo de esta segunda forma al principio de la entrada ¿Cómo mostrar una imagen de producto en tienda Woocommerce distinta a la imagen destacada?
    Se cambiaría el nombre del archivo custom_woocommerce.php de esa entrada por custom_functions.php, la idea final de hacerlo de esta forma es tener el código un poco más organizado.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.