A raiz de un comentario en esta página, pensé que sería interesante compartir una manera rápida de poder separar los contenidos de una web basada en WordPress según el usuario que está conectado.
Por ejemplo, pongamos que quiero mostrar una barra lateral condicional para mis usuarios, una función, o simplemente añadir una nota o aviso dirigida a alguien en concreto.
Conviene aclarar que cuando hablamos de “usuarios” nos referimos a usuarios de WordPress, es decir, que están dados de alta en el sistema, sea con el rol de administrador, editor, autor, colaborador o suscriptor (no usuarios de la web en general).
La versatilidad de WordPress en cuanto a la gestión de usuarios es muy completa, por lo que para hacer este tipo de ajustes en principio no necesitamos ningún plugin. En realidad es muy fácil de conseguir, siempre y cuando nos encontremos cómodos editando las plantillas de WordPress y ajustando algunos detalles básicos en la lógica condicional de PHP.
Vamos a ver algunos ejemplos.
Mostrar u ocultar contenidos según el nombre o ID de cada usuario
Para empezar podemos utilizar la función get_currentuserinfo(), que nos permite acceder a información del usuario como su nombre, su número de identificador, su dirección de email, etc.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <?php // Accedemos a la variable global global $current_user; // Obtenemos la informacion del usuario conectado y asignamos los valores a las variables globales // Mas info sobre 'get_currentuserinfo()': // http://codex.wordpress.org/Function_Reference/get_currentuserinfo get_currentuserinfo(); // Guardamos el nombre del usuario en una variable $usuario = esc_attr($current_user->user_login); // Condicionales: mostramos contenido segun el nombre de cada usuario if ($usuario === 'Admin') { // Aqui incluimos el contenido para el usuario 'Admin' } elseif ($usuario === 'Daniel') { // Aqui incluimos el contenido para el usuario 'Daniel' } else { // Aqui incluimos el contenido para el resto de usuarios y visitantes } ?> |
Podríamos añadir el código anterior en la plantilla “sidebar.php”, o “header.php” para dar la bienvenida a cada usuario llamándole por su nombre, o por ejemplo para mostrar una foto diferente según el usuario. Las posibilidades dependen de la imaginación de cada uno.
Lo mismo se puede hacer si, en vez de diferenciar el contenido según el nombre, queremos hacerlo según su número de identificador (ID), su dirección de correo o su nombre de pantalla. Por ejemplo, para mostrar contenido diferente según el ID de cada usuario:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php $user_id = get_current_user_id();if ( is_user_logged_in() ) { if ( 2 == $user_id ) { // Contenido exclusivo para el usuario con ID=2 } elseif ( 3 == $user_id ) { // Contenido exclusivo para el usuario con ID=3 } else { // Contenido para el resto de usuarios registrados // Cualquier ID menos los anteriores (2 y 3) }} else { // Contenido para los usuarios que no están registrados}?> |
Condicionar los contenidos según el rol y permisos del usuario
Separar los contenidos de nuestra web según el rol o los privilegios de cada usuario es aun más fácil, gracias al sistema de roles y capacidades que WordPress incluye desde la versión 3.0:
1
2
3
4
5
6
7
| <?php if (current_user_can('update_core')) { // Contenido para los usuarios con capacidad para actualizar el sistema (es decir, administradores) echo 'Tú debes ser el administrador, ¿verdad?. Bienvenido a casa!'; } elseif (current_user_can('edit_pages')) { // Contenido para editores y usuarios con un rol superior (con capacidad para editar páginas) echo 'Hola editores y administradores de esta web!'; } ?> |
Antes de la inclusión de este sistema de capacidades, podíamos separar a los usuarios según su nivel. Aunque sigue funcionando en las versión actuales de WordPress, esta práctica se considera obsoleta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php global $current_user; get_currentuserinfo(); $usuario = esc_attr($current_user->user_level); if ($usuario == 10) { // Contenido para los usuarios cuyo nivel sea 10, es decir, administradores: echo 'Tú debes ser el administrador, ¿verdad?. Bienvenido a casa! Tu nivel de usuario es: ' . $usuario; } elseif ($usuario == 7) { // Contenido para los usuarios cuyo nivel sea 7, es decir, editores: echo 'Hola editor! Tu nivel de usuario es: ' . $usuario; } elseif ($usuario == 2) { // Contenido para los usuarios cuyo nivel sea 2, es decir, autores: echo 'Hola autor! Tu nivel de usuario es: ' . $usuario; } else { } |
También podemos especificar niveles de usuarios utilizando otros operadores de comparación como ‘<' (menor que) o '>‘ (mayor que):
1
2
3
4
5
| if ($usuario >= 7) { echo '<br />Esto es solo para administradores y editores. Nadie más puede verlo.';} else { echo '<br />Si estás viendo este mensaje es que no eres editor ni administrador de esta web.';} ?> |
Pero recuerda, los niveles de usuario dejaron de utilizarse hace bastante tiempo en favor del sistema de roles y capacidades.
Cómo crear un tipo de usuario nuevo (añadir rol)
Algo muy útil que WordPress nos permite hacer fácilmente es crear roles nuevos y asignarles capacidades exclusivas. Por ejemplo, vamos a imaginarnos que tenemos un cliente que necesita acceder a una parte de la web (un widget, una barra lateral, un texto…):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?php // Accedemos a la variable global creada por WordPress global $wp_roles; // Añadimos un nuevo rol para este tipo de usuarios $wp_roles->add_role('cliente', 'Cliente', array( 'read' => true, // Les damos permisos de lectura (como a los suscriptores) 'edit_posts' => false, // No tienen permisos suficientes para editar entradas 'delete_posts' => false, // No tienen permisos suficientes para eliminar entradas 'leer_datos' => true // Creamos una capacidad nueva exclusiva para este rol )); if (current_user_can('leer_datos')) { // Contenido exclusivo para el nuevo rol que hemos creado echo '¡Hey, tú tienes permiso para leer esto!'; } else { // Mostramos (o no) un contenido diferente para el resto de usuarios } // Para eliminar el nuevo rol que hemos creado: // global $wp_roles; // $wp_roles->remove_role('Cliente');?> |
Mostrar contenido según el estado (conectado/no conectado)
De manera más general, podemos diferenciar a los usuarios conectados, del resto de personas que visitan nuestra web para mostrarles contenido, aplicar una funcionalidad concreta o cualquier cosa:
1
2
3
4
5
6
| <?php if (is_user_logged_in()) { // Contenido visible únicamente para usuarios conectados } else { // Contenido para el resto de visitas (o usuarios no conectados) } ?> |
Uno de los usos más frecuentes y útiles de esta función es cargar el código de seguimiento de estadísticas (Google Analytics, por ejemplo) solo para los usuarios que no están conectados:
1
2
3
4
5
| <?php // Si el usuario no esta conectado... if (!is_user_logged_in()) { // Aqui copiamos el código de Analytics } ?> |
En este otro artículo encontrarás información sobre cómo redirigir a los usuarios a páginas diferentes al registrarse en el sistema.
No hay comentarios:
Publicar un comentario