Contenido condicional basado en usuarios

Mostrar contenido en WordPress según el usuario que está conectado

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.

<?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:

<?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:

<?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:

<?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):

	  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…):

<?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:

<?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:

<?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.

Plugins relacionados

  • Optional Content: Mostrar u ocultar contenido de manera condicional en una página o post (basado en shortcodes). Es decir, nos permite restringir el acceso de fragmentos de una entrada o página a un tipo de usuario.
    URL: http://wordpress.org/extend/plugins/optional-content/
  • Restrict Content Pro (Premium Membership Plugin): Completo sistema de gestión de socios/miembros, suscripciones y contenido restringido. Permite crear niveles (gratuito, prueba y premium), seguimiento de pagos, ofrecer descuentos y contenidos privados solo para suscriptores.
    URL: http://pippinsplugins.com/restrict-content-pro-premium-content-plugin/
  • Hide This: este plugin utiliza shortcodes para ocultar partes del contenido en entradas y páginas. Permite especificar bastantes opciones, como ocultar contenido para todo el mundo, oculto para todos excepto para un usuario determinado, sólo para usuarios conectados (o no conectados), sólo para uno o varios roles específicos (por ejemplo: suscriptor y colaborador), para un usuario específico con un nombre de usuario, ID o email determinados…
    URL: https://wordpress.org/plugins/hide-this/

Comentarios

Responder a Johan Chirino Cancelar la respuesta

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)

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