Tutorial WordPress: Aplicar CSS solo a usuarios logueados con clases del body

·

·

Introducción

Este tutorial explica, con todo lujo de detalles, cómo aplicar CSS únicamente a usuarios logueados en WordPress aprovechando las clases que WordPress añade al elemento body. Verás métodos simples y avanzados, ejemplos prácticos (CSS y PHP) y advertencias sobre caché y seguridad para que la solución funcione de manera fiable en un entorno real.

Cómo funciona (resumen técnico)

WordPress añade automáticamente la clase logged-in al body cuando un usuario ha iniciado sesión. Esa clase permite prefixar selectores CSS para que las reglas solo afecten a usuarios logueados. Además, es posible añadir clases personalizadas al body (p. ej. por rol) usando el filtro body_class, y también condicionar la carga de hojas de estilo desde PHP con is_user_logged_in().

Comprobar las clases del body

  1. Abre una página de tu web estando logueado.
  2. Inspecciona el elemento body con las herramientas del navegador (Inspector) y revisa la lista de clases verás logged-in entre ellas.
  3. Si añades clases mediante el filtro body_class, aparecerán también ahí.

Método 1 — CSS básico: usar .logged-in

La forma más sencilla es prefijar tus selectores con .logged-in. Así, las reglas solo se aplican cuando el body contiene esa clase.

Ejemplo práctico (pon este CSS en el style.css de tu tema hijo o en Apariencia → Personalizar → CSS adicional):

/ Solo para usuarios logueados /
.logged-in .solo-logueados {
  background: #f5f9ff
  border-left: 4px solid #2b9cff
  padding: 12px
}

/ Ocultar un bloque para usuarios logueados /
.logged-in .promo-para-visitantes {
  display: none
}

Método 2 — Añadir clases por rol al body (PHP)

Si necesitas reglas CSS específicas por rol (por ejemplo, administrador vs suscriptor), añade clases del tipo role-rolname al body mediante el filtro body_class. Usa este código en functions.php del tema hijo o en un plugin específico del sitio.

roles )  is_array( user->roles ) ) {
            foreach ( user->roles as role ) {
                classes[] = role- . sanitize_html_class( role )
            }
        }
    } else {
        classes[] = not-logged-in
    }
    return classes
}
?>

Ahora puedes usar reglas como:

/ Solo para administradores /
.logged-in .role-administrator .panel-admin {
  display: block
}

/ Solo para suscriptores /
.logged-in .role-subscriber .ofertas-usuario {
  background: #fffbe6
}

Método 3 — Añadir explícitamente la clase not-logged-in

WordPress no añade por defecto una clase para usuarios no logueados si la necesitas para escribir reglas específicas, agrégala con el filtro body_class (ejemplo anterior ya lo incluye añadiendo not-logged-in para visitantes).

Dónde colocar el CSS

Encolar CSS solo para usuarios logueados (opción alternativa)

En lugar de depender únicamente de la clase del body, puedes encolar un archivo CSS únicamente cuando el usuario esté logueado. Esto evita enviar reglas innecesarias a visitantes y reduce efectos secundarios con algunos sistemas de caché.


Ejemplos prácticos y combinaciones útiles

Algunos ejemplos de reglas útiles prefixadas por .logged-in o por clases de rol:

/ Quitar sombra o cambiar layout solo para usuarios logueados /
.logged-in .hero {
  box-shadow: none
}

/ Mostrar un aviso exclusivo para administradores /
.logged-in .role-administrator .mensaje-admin {
  display: block
  color: #111
}

/ Cambiar enlace de perfil solo para suscriptores /
.logged-in .role-subscriber .link-perfil {
  color: #008080
}

Tabla resumen: selectores y cuándo usarlos

Selector Uso
.logged-in .selector Aplicar estilo a cualquier usuario logueado.
.logged-in .role-administrator .selector Aplicar estilo solo a administradores (requiere añadir clases por rol).
.not-logged-in .selector Aplicar estilo solo a visitantes no logueados (si añades esta clase).

Consideraciones importantes y buenas prácticas

Solución de problemas comunes

  1. No veo la clase logged-in: revisa que realmente estás logueado y que no haya un proxy/caché sirviendo la versión para visitante.
  2. Mi CSS no se aplica: comprueba la especificidad y el orden de carga del CSS encola o coloca la regla en un archivo que se cargue después si es necesario.
  3. Reglas aplicadas a todos: asegúrate de prefijar siempre con .logged-in o con la clase de rol que hayas añadido.

Conclusión

Aplicar CSS solo a usuarios logueados en WordPress es sencillo y flexible usando las clases que WordPress coloca en el body. Para necesidades más avanzadas, añade clases por rol con el filtro body_class y/o encola hojas de estilo de forma condicional con is_user_logged_in(). Mantén en cuenta las implicaciones de caché y recuerda que el control de acceso debe hacerse en el servidor, no solo con CSS.



Leave a Reply

Your email address will not be published. Required fields are marked *