WordPress: Cómo restringir el contenido a usuarios no registrados

¡Buenos días! En este vídeo vamos a ver cómo ocultar el contenido a los usuarios que no están registrados ni logueados en nuestra página web hecha en WordPress. ¡Vamos allá!

YouTube video

Para hacerlo crearemos un shortcode con el cual podremos envolver el contenido que queremos ocultar. Si el usuario no está logueado, le aparecerá un mensaje que nosotros elijamos pero si está logueado podrá ver el contenido sin problema.

Seguiremos estos sencillos pasos:

1. Accedemos al archivo functions.php en el directorio de nuestro tema (método no recomendado) o a nuestro plugin de snippets (método recomendado).

2. Creamos un snippet y pegamos el siguiente código:

add_shortcode( 'privado', 'bp_contenido_privado' );

function bp_contenido_privado( $atts, $content = null ) {
   if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
   return $content;
   return '<p class="privado">Este contenido esta reservado para los usuarios registrados. Registrate <a href="'.wp_registration_url().'">aquí</a> para poder verlo.</p>';}

Lo que hará esta función es exactamente lo que hemos dicho antes: devolver el contenido si el usuario ha iniciado la sesión o mostrar el mensaje de contenido restringido si el usuario no esta logueado.

3. Ahora para hacer la prueba vamos a crear una entrada y envolvemos el contenido que queremos restringir con los shortcodes [privado] [/privado]. Tiene que quedar algo así:

4. Entramos a esa entrada en modo incógnito (o cerrando la sesión en WordPress) y vemos que nos devuelve el mensaje de contenido restringido.

Bonus track 1: enlace de inicio de sesión

Si os fijáis he añadido un enlace a la URL de registo en el mensaje de aviso, con la función wp_registration_url(). Si también queréis añadir un enlace a la URL de inicio de sesión en el mensaje podéis utilizar la función wp_login_url(). Al final podría quedar algo así:

return '<p class="privado">Este contenido esta reservado para los usuarios registrados. Registrate <a href="'.wp_registration_url().'">aquí</a> o <a href="'.wp_login_url().'">inicia la sesión</a> para poder verlo.</p>';}

Bonus track 2: estilos CSS

Si os volvéis a fijar, he añadido una clase .privado a ese mensaje de aviso. Para que nos quede un mensaje más llamativo podemos apuntar a esa clase y añadirle estilos CSS. Aquí os dejo una propuesta que podéis modificar a vuestro gusto:

p.privado {
   padding: 20px;
   background-color: rgba(76, 66, 222, 0.24);
}

Acabaría quedando algo así:

Bonus track 3: redirigir a la misma página después del login

Gracias a la aportación de José Maria Labarta he visto interesante extender el artículo enseñando cómo redirigir al usuario a la misma entrada después de hacer el login, en lugar de terminar en el panel de control de usuario.

Para hacerlo es tan simple como añadir la función get_permalink() como parámetro dentro de la función wp_login_url() para que quede así:

wp_login_url(get_permalink())

De esta manera se lo ponemos más fácil a nuestros usuarios para no hacerles buscar la entrada otra vez.

También te puede interesar

WordPress: Cómo poner la web en modo mantenimiento
WordPress: Cómo excluir categorías del blog
Cómo hacer una instalación de WordPress en local

¿Eres una agencia o diseñador y necesitas un servicio profesional de maquetación web?
Tu web maquetada pixel-perfect en tiempo record con las mejores prácticas de desarrollo y optimización de velocidad
Servicio maquetación web