✅Cómo Restringir una Categoría a Usuarios Registrados en WordPress (Sin Plugins)

A veces solo quieres hacer algo muy simple: que una categoría concreta de tu blog solo esté visible para los usuarios que están registrados. Nada más. No necesitas un plugin de membresía ni un sistema de roles avanzado. Solo quieres que, por ejemplo, todo lo que publiques en la categoría “Premium” no lo pueda leer cualquiera.

Y lo mejor: se puede hacer con unas pocas líneas de código. Sin plugins, sin complicaciones.

Qué vamos a hacer exactamente

Vamos a proteger una categoría concreta de WordPress para que solo sea accesible a usuarios registrados. Si alguien no está logueado e intenta acceder a una entrada de esa categoría, lo redirigiremos al formulario de login (o a donde tú quieras).

Paso 1: Identifica el slug o el ID de la categoría que quieres proteger

Ve a tu panel de WordPress → Entradas → Categorías y busca la categoría que quieres proteger.

  • Si la URL es algo como tusitio.com/category/premium, entonces el slug es premium.
  • O si prefieres trabajar con el ID, pasa el ratón sobre el nombre y verás algo como tag_ID=27. En ese caso, el ID sería 27.

Paso 2: Añade este código al functions.php de tu tema hijo o en un snippet de Code Snippets

Te dejo dos versiones del mismo snippet: una usando el slug, y otra usando el ID.

Versión 1: proteger por slug

function restringir_categoria_para_usuarios_no_registrados( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( is_single() && ! is_user_logged_in() ) {
        $post_categories = wp_get_post_categories( get_the_ID(), ['fields' => 'slugs'] );

        if ( in_array( 'premium', $post_categories ) ) {
            wp_redirect( 'https://misitio.com/acceder' );
            exit;
        }
    }
}
add_action( 'pre_get_posts', 'restringir_categoria_para_usuarios_no_registrados' );Lenguaje del código: PHP (php)

Versión 2: proteger por ID

function restringir_categoria_id_para_no_registrados( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( is_single() && ! is_user_logged_in() ) {
        $post_categories = wp_get_post_categories( get_the_ID() );

        if ( in_array( 27, $post_categories ) ) {
            wp_redirect( 'https://misitio.com/acceder' );
            exit;
        }
    }
}
add_action( 'pre_get_posts', 'restringir_categoria_id_para_no_registrados' );
Lenguaje del código: PHP (php)
  • Cambia premium o 27 por el slug o el ID de la categoría que tú quieras proteger.
  • Cambia https://misitio.com/acceder por la url donde el usuario no logueado será redirigido.

Bonus: Ocultar esa categoría del loop si el usuario no está logueado

¿No quieres que esa categoría ni siquiera aparezca en la home o en los listados? Puedes usar esto:

function ocultar_categoria_para_no_logueados( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( ! is_user_logged_in() ) {
        $query->set( 'category__not_in', array( 27 ) ); // usa el ID de la categoría
    }
}
add_action( 'pre_get_posts', 'ocultar_categoria_para_no_logueados' );
Lenguaje del código: PHP (php)

Conclusión

No hace falta montar un sistema de membresía completo para algo tan específico. Si solo quieres proteger una categoría y asegurarte de que solo los usuarios registrados puedan ver su contenido, este método es limpio, ligero y efectivo.

Y como siempre: si más adelante necesitas algo más potente (contenido condicional, suscripciones, etc.), puedes escalarlo con plugins como Ultimate Membership Pro, Restrict Content Pro o MemberPress. Pero si solo quieres restringir una categoría, esto es más que suficiente.

Nos vemos en el siguiente tutorial. Un saludo.

5/5 - (2 votos)
Compartir Artículo

Un comentario

  1. Fran Salas Master WP 1 año atrás

    ¿Tienes alguna duda? Déjala en los comentarios.

¿Tienes una duda o sugerencia sobre este artículo?

Puedes dejar un comentario de forma anónima, sin necesidad de registrarte ni proporcionar ningún dato personal. Tu mensaje se publicará como “Usuario Anónimo No Premium”, un perfil que agrupa a todos los visitantes no registrados.

Importante: para evitar el spam automático, todos los comentarios anónimos deben comenzar con el símbolo #. Ejemplo: # Tengo una duda sobre los shortcodes personalizados...

Este espacio está destinado exclusivamente a preguntas concretas, dudas o sugerencias relacionadas con el contenido del artículo. Por respeto a los demás lectores, no se publicarán temas sin relación.

Privacidad y normas:
  • No tienes que agregar tu nombre, correo ni ningún otro dato identificativo.
  • No se permiten enlaces en comentarios anónimos.
  • No se permiten símbolos especiales como < o > (menor y mayor que), ya que se consideran intentos de insertar código y serán bloqueados.
  • Todos los comentarios anónimos pasan por revisión antes de ser publicados y solo se aprobarán si aportan valor al contenido del artículo.
¿Quieres comentar con tu nombre y que tu mensaje se publique al instante? Inicia sesión o regístrate.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0%