Desactivar la barra de administración de WordPress para no administradores

Desactivar la barra de administración de WordPress para no administradores

Última verificación: 13 de octubre de 2026
15 min de lectura
Tutorial
500+ proyectos WP

Cuando construyes un sitio de membresía, una tienda online con WooCommerce o un portal corporativo donde los usuarios inician sesión, el comportamiento predeterminado de WordPress resulta inadecuado. Cada usuario registrado ve la barra de herramientas negra en la parte superior de la pantalla.

Descubre más sobre servicios de desarrollo WordPress en WPPoland. Aunque es útil para un administrador a la hora de editar contenidos con rapidez o acceder al escritorio, rompe la estética de la tienda o portal. Expone enlaces internos irrelevantes y genera problemas de alineación en cabeceras fijas.

Si el objetivo es proporcionar un área de clientes o catálogo limpio, la solución técnica consiste en desactivar la barra en el frontend para aquellos usuarios que carecen de atribuciones de gestión, manteniendo intacta la experiencia administrativa en el panel interno.

#Por qué ocultar la barra de administración de WordPress

La barra de herramientas de WordPress (conocida internamente en el núcleo como Toolbar) se muestra por defecto a cualquier usuario autenticado. Aunque resulta práctica en blogs editoriales con múltiples redactores, en entornos de comercio electrónico y portales de clientes ocasiona problemas concretos:

  • Sitios de membresía: Los suscriptores que acceden a cursos o artículos exclusivos reciben enlaces confusos a pantallas de perfil estándar de WordPress.
  • Tiendas online: Los compradores se distraen con accesos directos administrativos mientras navegan por el catálogo o finalizan su pedido.
  • Portales de clientes B2B: Muestra una imagen técnica inacabada al revelar la estructura interna del CMS a clientes corporativos.
  • Aplicaciones web personalizadas: Genera interferencias visuales con cabeceras fijas y barras de navegación flotantes.

Los motivos técnicos para desactivarla incluyen:

  • Superposición con cabeceras de navegación fijas (position: sticky o position: fixed).
  • Desplazamiento vertical no deseado de 32 píxeles en escritorio y 46 píxeles en dispositivos móviles.
  • Exposición de nombres de usuario y rutas internas del sistema a perfiles no autorizados.

#El hook de filtro show_admin_bar frente a after_setup_theme

En tutoriales antiguos solía recomendarse invocar la función procedimental show_admin_bar(false) dentro de ganchos de acción como after_setup_theme o init. Aunque esa llamada altera una variable global interna, el estándar moderno y oficial en WordPress consiste en utilizar el filtro show_admin_bar.

La función del núcleo is_admin_bar_showing() consulta este filtro durante la construcción de la respuesta web antes de que se encolen hojas de estilo o fragmentos de marcado HTML:

<?php
/**
 * Desactivar la barra de herramientas en el frontend para no administradores
 */
add_filter( 'show_admin_bar', 'wppoland_filtrar_barra_herramientas' );

function wppoland_filtrar_barra_herramientas( bool $show ): bool {
    // Mantener la barra activa en el escritorio de administracion (/wp-admin/)
    if ( is_admin() ) {
        return $show;
    }

    // Permitir la barra unicamente a usuarios con la capacidad manage_options
    return current_user_can( 'manage_options' );
}

Ventajas de emplear el filtro nativo:

  1. Devuelve un valor booleano directo al núcleo sin mutar variables globales en momentos imprevistos.
  2. Impide que funciones como wp_admin_bar_header() inyecten bloques de compensación CSS en la etiqueta <head>.
  3. Permite a otros módulos o plugins prioritarios interactuar limpiamente con la cadena de filtros.

#Comprobación de capacidades con current_user_can frente a roles

Uno de los fallos arquitectónicos más comunes al personalizar accesos en WordPress radica en evaluar nombres de rol literales:

// Patron fragil: comprobacion de cadena de rol
if ( ! current_user_can( 'administrator' ) ) {
    show_admin_bar( false );
}

Por qué comprobar nombres de roles genera problemas:

  • Ausencia de contrato estricto: 'administrator' es un slug de rol, no una capacidad nativa. Aunque WordPress ofrece compatibilidad histórica para algunos nombres de rol, este mecanismo no garantiza estabilidad cuando se crean perfiles a medida.
  • Roles administrativos personalizados: En proyectos empresariales es frecuente configurar roles como gestor_tienda, editor_jefe o soporte_tecnico. Comparar únicamente 'administrator' bloquea a usuarios con privilegios legítimos.
  • Redes Multisite: En entornos de red (Multisite), los superadministradores poseen permisos que difieren de los administradores locales de cada sitio.

La capacidad estándar y recomendada para verificar acceso de administración es manage_options:

current_user_can( 'manage_options' )

Si el equipo incluye redactores o editores que requieren la barra en el frontend para revisar borradores, evalúa capacidades editoriales como edit_posts:

<?php
add_filter( 'show_admin_bar', function( bool $show ): bool {
    if ( is_admin() || ! is_user_logged_in() ) {
        return $show;
    }

    // Mostrar la barra a quienes pueden editar entradas
    return current_user_can( 'edit_posts' );
} );

#Por qué ocultar la barra con CSS display none es un error

Una solución recurrente en foros consiste en añadir una regla CSS rápida a la hoja de estilos:

/* Antipatron: no utilizar en entornos de produccion */
#wpadminbar {
    display: none !important;
}

Ocultar la barra únicamente mediante CSS genera graves deficiencias:

  1. Carga innecesaria de recursos: WordPress continúa encolando admin-bar.min.css, dashicons.min.css y el archivo JavaScript admin-bar.min.js. El navegador descarga y procesa activos para un elemento que nunca se muestra.
  2. El problema del margen superior de 32 píxeles: Cuando WordPress detecta una sesión activa, inyecta un bloque de estilos en línea en el encabezado:
    html { margin-top: 32px !important; }
    @media screen and (max-width: 782px) {
        html { margin-top: 46px !important; }
    }
    Si aplicas display: none a #wpadminbar, el elemento desaparece, pero la regla margin-top sobre la etiqueta <html> permanece intacta. La página muestra un espacio en blanco superior antiestético y las cabeceras fijas quedan desalineadas.
  3. Problemas de accesibilidad y foco: Los lectores de pantalla y la navegación mediante teclado siguen accediendo a los enlaces invisibles presentes en el DOM.
  4. Exposición de información: El código fuente HTML de la página continúa revelando identificadores de usuario y menús internos de plugins instalados.

Al emplear el filtro PHP show_admin_bar, el marcado HTML y sus estilos asociados se cancelan desde el servidor.

#Bloqueo del acceso al escritorio mediante admin_init y template_redirect

Ocultar la barra de herramientas en el frontend limpia la interfaz visual, pero no impide que un suscriptor o cliente teclee directamente /wp-admin/ o /wp-admin/profile.php en su navegador. Por defecto, WordPress permite a los suscriptores ver la pantalla de edición de perfil, exponiendo URLs internas y avisos de plugins.

Para establecer un aislamiento efectivo entre clientes y el panel de administración, vincula el filtro con una redirección en el gancho admin_init:

<?php
/**
 * Restringir el acceso a /wp-admin/ para usuarios sin permisos de gestion
 */
add_action( 'admin_init', 'wppoland_restringir_escritorio_admin' );

function wppoland_restringir_escritorio_admin(): void {
    // Excepcion imprescindible: permitir solicitudes asincronas AJAX
    if ( wp_doing_ajax() ) {
        return;
    }

    // Administradores y gestores conservan acceso directo
    if ( current_user_can( 'manage_options' ) ) {
        return;
    }

    // Redirigir a clientes y suscriptores al portal de cuenta o inicio
    wp_safe_redirect( home_url( '/mi-cuenta/' ) );
    exit;
}

La comprobación wp_doing_ajax() es crucial. Los scripts del carrito y procesos dinámicos de WooCommerce envían peticiones asíncronas POST a /wp-admin/admin-ajax.php. Sin esta excepción, las operaciones de compra fallarían con redirecciones HTTP 302.

Adicionalmente, puedes evitar la exposición de nombres de usuario bloqueando los archivos de autor para clientes en template_redirect:

<?php
add_action( 'template_redirect', 'wppoland_bloquear_archivos_autor_clientes' );

function wppoland_bloquear_archivos_autor_clientes(): void {
    if ( is_author() ) {
        $author = get_queried_object();
        if ( $author instanceof WP_User && in_array( 'customer', (array) $author->roles, true ) ) {
            wp_safe_redirect( home_url(), 301 );
            exit;
        }
    }
}

#Particularidades de tiendas WooCommerce y portales de membresía

En sitios de comercio electrónico y academias online, las necesidades de los usuarios difieren sustancialmente:

#Portales de clientes en WooCommerce

Los clientes operan a través de los puntos finales nativos de WooCommerce (/mi-cuenta/, /mi-cuenta/pedidos/). La presencia de la barra de herramientas de WordPress no aporta valor y con frecuencia colisiona con menús laterales y carritos deslizantes:

<?php
add_filter( 'show_admin_bar', function( bool $show ): bool {
    if ( is_admin() ) {
        return $show;
    }

    $user = wp_get_current_user();
    if ( in_array( 'customer', (array) $user->roles, true ) ) {
        return false;
    }

    // Los gestores de tienda deben ver la barra para editar productos rapidamente
    if ( current_user_can( 'manage_woocommerce' ) ) {
        return true;
    }

    return current_user_can( 'manage_options' );
} );

#Sitios de membresía y plataformas LMS

En plataformas como MemberPress o LearnDash, los suscriptores pagan por consumir contenidos formativos. Suprimir la barra de herramientas garantiza que los reproductores de vídeo a pantalla completa y las lecciones estructuradas no sufran saltos de diseño.

#Gestión selectiva de nodos de la barra para equipos editoriales

Cuando el objetivo no es eliminar la barra por completo para redactores, sino limpiarla de elementos innecesarios como avisos de actualización o enlaces a foros, puedes manipular sus nodos con la clase WP_Admin_Bar:

<?php
/**
 * Eliminar nodos superfluos de la barra para redactores
 */
add_action( 'admin_bar_menu', 'wppoland_limpiar_nodos_barra', 999 );

function wppoland_limpiar_nodos_barra( WP_Admin_Bar $wp_admin_bar ): void {
    // Los administradores conservan todos los accesos
    if ( current_user_can( 'manage_options' ) ) {
        return;
    }

    // Retirar logotipo de WordPress, comentarios y avisos
    $wp_admin_bar->remove_node( 'wp-logo' );
    $wp_admin_bar->remove_node( 'about' );
    $wp_admin_bar->remove_node( 'wporg' );
    $wp_admin_bar->remove_node( 'documentation' );
    $wp_admin_bar->remove_node( 'support-forums' );
    $wp_admin_bar->remove_node( 'feedback' );
    $wp_admin_bar->remove_node( 'comments' );
    $wp_admin_bar->remove_node( 'new-content' );
    $wp_admin_bar->remove_node( 'updates' );
}

#Despliegue mediante Must-Use Plugin frente a functions.php

El lugar donde se almacena el código condiciona su fiabilidad técnica a largo plazo:

CriterioTheme functions.phpMust-Use Plugin (wp-content/mu-plugins/)
Cambio de temaEl código deja de funcionar al cambiar el temaPermanece activo independientemente del tema
Momento de cargaCarga tardía durante la inicialización del temaCarga temprana antes que los plugins normales
Desactivación accidentalPuede perderse en actualizaciones del temaNo puede desactivarse desde el panel de WordPress
Control de versionesVinculado al repositorio del temaRastreable en el repositorio de infraestructura

Crea el archivo wp-content/mu-plugins/wppoland-admin-bar-policy.php:

<?php
/**
 * Plugin Name: WPPoland Politica de Barra de Administracion
 * Description: Desactivar la barra para no administradores y bloquear acceso al panel.
 * Author: WPPoland
 * Version: 1.0.0
 */

declare(strict_types=1);

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

// 1. Filtrar visibilidad en el frontend
add_filter( 'show_admin_bar', static function( bool $show ): bool {
    if ( is_admin() ) {
        return $show;
    }

    return current_user_can( 'manage_options' );
}, 10 );

// 2. Bloquear panel interno para usuarios sin permisos de gestion
add_action( 'admin_init', static function(): void {
    if ( wp_doing_ajax() ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_safe_redirect( home_url( '/' ) );
        exit;
    }
}, 10 );

#Gestión de preferencias de perfil y metadatos de usuario

WordPress incluye en la ficha de cada usuario una casilla denominada “Mostrar la barra de herramientas al ver el sitio”. Esta opción se almacena en la tabla usermeta bajo la clave show_admin_bar_front.

El orden de resolución del núcleo:

  1. Comprueba la variable global $show_admin_bar.
  2. Lee el metadato del usuario mediante get_user_option( 'show_admin_bar_front' ).
  3. Pasa el resultado por el filtro show_admin_bar.

Dado que el filtro actúa al final de la secuencia, nuestra lógica sobreescribe la preferencia guardada en el perfil. Si deseas permitir que los redactores decidan si quieren ver la barra, puedes respetar su metadato de perfil:

<?php
add_filter( 'show_admin_bar', function( bool $show ): bool {
    if ( is_admin() || ! is_user_logged_in() ) {
        return $show;
    }

    // Los clientes y suscriptores nunca ven la barra
    if ( ! current_user_can( 'edit_posts' ) ) {
        return false;
    }

    // Comprobar si el redactor la desactivo explicitamente en su perfil
    $user_id = get_current_user_id();
    $pref    = get_user_meta( $user_id, 'show_admin_bar_front', true );

    if ( 'false' === $pref ) {
        return false;
    }

    return true;
} );

#Adaptación a Full Site Editing y temas de bloques

En temas basados en bloques (FSE) como Twenty Twenty-Four, la navegación superior depende de propiedades como position: sticky; top: 0;.

La interacción con la barra requiere cuidado:

  • Ocultar la barra con CSS conserva los desfases de cálculo en los bloques de navegación, lo que provoca que el menú dé saltos al desplazarse por la página.
  • El filtro PHP elimina la clase .admin-bar del elemento <body>, permitiendo que las cabeceras fijas encajen de forma natural en la parte superior de la ventana.

#Consideraciones en instalaciones Multisite y redes WordPress

En instalaciones multisitio de WordPress (Multisite Network), la jerarquía de roles introduce complejidades adicionales que conviene gestionar con precisión:

  1. Superadministradores de la red frente a administradores locales: Un usuario con el rol de superadministrador posee la capacidad universal manage_network_options y la función auxiliar is_super_admin(). Un administrador local de un subdominio o subdirectorio únicamente ostenta manage_options dentro del contexto de su blog asignado.
  2. Despliegue centralizado en mu-plugins de la red: Para que una regla rija en toda la red sin depender de que cada administrador local configure su propio tema, aloja siempre la función dentro del directorio global wp-content/mu-plugins/. En multisitio, los mu-plugins se ejecutan de manera uniforme antes de cualquier plugin de red o plugin individual.
  3. Mapeo entre sitios independientes: Si un cliente está registrado como suscriptor en el Sitio A pero dispone de perfil editorial en el Sitio B, las comprobaciones basadas en current_user_can() evalúan las capacidades del usuario activo dentro del blog cargado en ese instante (get_current_blog_id()), previniendo fugas de privilegios entre subsitios.

El siguiente ejemplo ilustra una regla optimizada para redes WordPress multisitio:

<?php
/**
 * Gestion de barra de administracion para redes Multisite
 */
add_filter( 'show_admin_bar', 'wppoland_multisite_barra_herramientas' );

function wppoland_multisite_barra_herramientas( bool $show ): bool {
    if ( is_admin() || ! is_user_logged_in() ) {
        return $show;
    }

    // Permitir la barra de inmediato a superadministradores de red
    if ( is_multisite() && is_super_admin() ) {
        return true;
    }

    // Para el resto de usuarios, comprobar capacidades locales del subsitio actual
    return current_user_can( 'manage_options' );
}

Al utilizar is_super_admin() junto a current_user_can( 'manage_options' ), los administradores de la red global mantienen intacta la barra de administración y el menú de mis sitios en toda la red, mientras los usuarios habituales disfrutan de una experiencia frontend despejada.

#Seguridad y prevención de enumeración mediante REST API

Ocultar la barra en el frontend mejora la usabilidad general, pero no sustituye las medidas de seguridad del servidor:

  1. Defensa en profundidad: Ocultar botones o enlaces visuales no previene llamadas directas a puntos finales protegidos. Valida capacidades en cada endpoint personalizado.
  2. Enumeración de usuarios en la REST API: La ruta /wp-json/wp/v2/users lista por defecto cuentas con artículos publicados. Protege este endpoint frente a escaneos automatizados:
<?php
/**
 * Restringir el endpoint de usuarios de la REST API
 */
add_filter( 'rest_endpoints', function( array $endpoints ): array {
    if ( isset( $endpoints['/wp/v2/users'] ) ) {
        $endpoints['/wp/v2/users'][0]['permission_callback'] = static function(): bool {
            return current_user_can( 'list_users' );
        };
    }
    return $endpoints;
} );

#Capas de almacenamiento en caché y proxies inversos

En servidores con Nginx FastCGI Cache, Varnish o Cloudflare:

  • Exclusión de cookies de sesión: Configura el proxy para ignorar la caché pública cuando detecte cookies como wordpress_logged_in_*. De lo contrario, un visitante anónimo podría recibir una página en caché generada con espacios de barra de administración.
  • Cabeceras Cache-Control: Los endpoints de cuenta de usuario, carrito y pago deben enviar cabeceras estrictas como Cache-Control: private, no-cache, no-store, must-revalidate.

#Lista de verificación de pruebas en staging

Antes de subir los cambios al entorno de producción, efectúa estas comprobaciones durante diez minutos:

  1. Visita sin autenticación: Abre una pestaña privada y carga la portada. Confirma que no existe #wpadminbar, que la etiqueta body no incluye la clase .admin-bar y que <html> presenta margin-top: 0.
  2. Cuenta de suscriptor o cliente: Accede como cliente de prueba. Comprueba que la cabecera del sitio queda alineada con el borde superior sin barras negras ni espacios en blanco.
  3. Acceso directo al panel: Escribe /wp-admin/ en la barra de direcciones como cliente y confirma que se produce la redirección automática a la portada o al área de cuenta.
  4. Cuenta de administrador: Inicia sesión con credenciales de administrador y confirma que la barra de herramientas permanece operativa en todas las páginas.
  5. Comprobación de peticiones AJAX: Añade un producto al carrito y confirma en la pestaña de red que las solicitudes a admin-ajax.php retornan un código 200 sin sufrir redirecciones.
  6. Dispositivos móviles: Emula una pantalla de menos de 782 píxeles de anchura para verificar que no queda ningún espacio de 46 píxeles en la parte superior.

#Resumen

Ocultar la barra de administración de WordPress para no administradores transforma tu instalación en un portal digital limpio y profesional. Aplicar el filtro nativo show_admin_bar junto con la verificación de capacidades manage_options y una redirección en admin_init garantiza un comportamiento óptimo y seguro.

Aspectos clave para recordar:

  • Utiliza add_filter('show_admin_bar', ...) en lugar de ocultar mediante CSS.
  • Comprueba capacidades en lugar de cadenas de texto con nombres de rol.
  • Bloquea el acceso al escritorio preservando las peticiones asíncronas con wp_doing_ajax().
  • Centraliza la lógica en wp-content/mu-plugins/ para que perdure tras actualizar o cambiar de tema.

Si necesitas ayuda para configurar áreas de clientes avanzadas o adaptar arquitecturas en WordPress, consulta nuestros servicios de desarrollo WordPress profesional en WPPoland.

Siguiente paso

Transforma el artículo en una implementación real

Este bloque refuerza el enlazado interno y lleva al lector al siguiente paso más útil dentro de la arquitectura del sitio.

¿Quieres implementar esto en tu sitio?

Si quieres transformar el artículo en mejoras concretas, rediseño o un plan de implementación, puedo cerrar el alcance y ejecutar.

Cluster relacionado

Explora otros servicios WordPress y base de conocimiento

Refuerza tu negocio con soporte técnico profesional en áreas clave del ecosistema WordPress.

Cómo afecta ocultar la barra a la funcionalidad de admin#
Los administradores seguirán viendo la barra de administración. El código comprueba específicamente la capacidad manage_options, que solo tienen los administradores. Otros usuarios no la verán en el frontend.
Es posible ocultar la barra solo para roles específicos#
Sí. Modifica la condición para evaluar capacidades o una lista de roles verificando las propiedades del usuario actual.
Dónde se debe añadir este código en WordPress#
Añádelo a un Must-Use plugin en wp-content/mu-plugins/ o al archivo functions.php de tu tema hijo. Nunca al tema padre.
Afecta esta regla al panel de administración del backend#
No. Esto solo afecta al frontend de tu sitio. La barra de administración seguirá visible en el panel de WordPress para los usuarios autorizados.
Existe una alternativa con plugin a este código#
Existen plugins, pero un filtro nativo en un Must-Use plugin es más ligero, evita consultas a la base de datos y no añade sobrecarga.

¿Necesitas un FAQ adaptado a tu sector y mercado? Preparamos una versión alineada con tus objetivos de negocio.

Hablemos

Artículos Relacionados