Mostrar contenido solo a usuarios logueados
WordPress permite controlar qué contenido ve cada usuario según su estado de autenticación. Hay dos enfoques complementarios: redirigir páginas completas si el usuario no está logueado, o ocultar secciones dentro de un post con un shortcode. Ambos son útiles para crear zonas privadas o acceso exclusivo a miembros.
Casos de uso: área de miembros, descargables exclusivos, contenido premium, dashboard personal del usuario, formularios solo para clientes.
<?php
// Opción 1: Redirigir si no está logueado
add_action( 'template_redirect', 'proteger_pagina' );
function proteger_pagina() {
if ( is_page( 'zona-privada' ) && ! is_user_logged_in() ) {
wp_redirect( wp_login_url( get_permalink() ) );
exit;
}
}
// Opción 2: Shortcode para ocultar contenido
add_shortcode( 'privado', 'shortcode_privado' );
function shortcode_privado( $atts, $content = '' ) {
if ( ! is_user_logged_in() ) {
return 'Debes iniciar sesión para ver este contenido.
';
}
return do_shortcode( $content );
}
// Uso: [privado]Contenido exclusivo para miembros[/privado]
¿Qué hace cada parte?
- template_redirect: hook que se dispara justo antes de cargar la plantilla. Es el momento correcto para redirigir — antes de que se envíe cualquier HTML al navegador.
- is_page( ‘zona-privada’ ): comprueba si estamos en esa página por su slug. También acepta ID o título.
- wp_login_url( get_permalink() ): genera la URL de login con el parámetro
redirect_toapuntando a la página actual. Tras el login, WordPress redirige automáticamente de vuelta. - is_user_logged_in(): función booleana de WordPress que comprueba si el visitante actual tiene una sesión activa.
- do_shortcode( $content ): procesa el contenido del shortcode por si contiene otros shortcodes anidados antes de devolverlo.
- Shortcode vs. template_redirect: usa
template_redirectpara proteger páginas completas; usa el shortcode cuando quieres proteger solo una parte del contenido de una página pública.
