Existen muchos plugins para mostrar u ocultar contenidos a diferentes tipos de usuarios, desde los que permiten hacerlo de forma sencilla y rápida en función del rol de usuario, como éste, hasta los que son auténticas «bestias» capaces de gestionar niveles de acceso, content dripping, etc, como WooCommerce Memberships.
Pero a veces necesitamos algo mucho más sencillo: simplemente mostrar un mensaje, un banner o un cupón solamente visible a los usuarios registrados. Pues no, no necesitas ningún plugin para eso. Y hay más de una forma de hacerlo.
Tabla de contenidos
Mostrar contenido sólo a usuarios registrados con la función is_user_logged_in
La primera de ellas es mediante código, haciendo uso de la función is_user_logged_in(), que devuelve verdadero si el usuario actual está identificado, y falso si no lo está.
Es decir, si metemos nuestro mensaje dentro de un condicional cuya condición sea is_user_logged_in(), sólo se mostrará en pantalla para los usuarios registrados y logueados:
if (is_user_logged_in()) :
?>
Este mensaje sólo se mostrará en pantalla a los usuarios registrados e identificados. Los invitados no podrán verlo.
¿La forma de poner eso dentro del contenido? Siempre puedes usar el plugin Insert PHP, que te permite insertar bloques de código dentro de cualquier contenido, o bien (mucho mejor) te puedes hacer un shortcode que lo haga.
Un shortcode que oculta contenidos a usuarios que no están registrados
Por ejemplo, algo así:
[usuarios]
Este mensaje y esta imagen sólo se mostrarán en pantalla a los usuarios registrados e identificados. Los invitados no podrán verlos.
[/usuarios]
Cómo hacer un shortcode así ya lo expliqué en su momento, pero por abreviarte el camino te lo doy hecho 🙂 :
add_shortcode ('usuarios', function ($atributos, $contenido = null) {
return is_user_logged_in() ? $contenido : false;
});
Ya lo ves, más fácil imposible. Sobre dónde poner ese código ya he hablado varias veces, por ejemplo aquí.
Contenido sólo visible para usuarios mediante CSS con la clase logged-in
El código siempre es la solución más potente y flexible, por supuesto, pero no todo el mundo se siente a gusto usándolo. Afortunadamente, para esto hay otra alternativa.
Se trata de una clase CSS que WordPress ya incluye al contenido (la aplica al body de hecho) cuando el usuario está identificado, la clase .logged-in.
Esto nos permite discriminar mediante CSS lo mostrado a un usuario registrado e identificado y a uno que no lo está. Basta con crear una clase específica para ello, y luego establecerla como no visible por defecto, a no ser que esté incluida en la clase .logged-in. Por ejemplo:
.solo-usuarios{display:none;}
.logged-in .solo-usuarios{display:initial;}
Después bastará con rodear nuestro contenido exclusivo para usuarios con la clase que hemos creado:
Este texto y esta imagen sólo los verán los usuarios identificados.
De todas formas, no confíes tus secretos a este método: mientras que el método anterior, por código, sólo genera el contenido si el usuario está identificado, el método por CSS lo genera siempre y lo oculta a los invitados. Sin embargo, la información está ahí, y se puede ver simplemente mirando el código fuente en el navegador.