Mostrar contenido solo a usuarios logueados

Php marzo 10, 2026

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_to apuntando 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_redirect para proteger páginas completas; usa el shortcode cuando quieres proteger solo una parte del contenido de una página pública.