Админ-панель WordPress, которая отображается сверху для авторизованных пользователей, — это удобный инструмент для быстрого доступа к консоли. Однако на готовом сайте, особенно во фронтенде, она часто мешает: может ломать верстку, конфликтовать со стилями и просто не нужна конечным пользователям или клиентам.
В этой статье мы разберем несколько способов полного отключения админ-бара — от простого до самого комплексного, который удалит не только панель, но и все связанные с ней стили, скрипты и классы.
Способ 1: Базовое отключение (одной строкой)
Самый простой и известный способ — использовать встроенный хук show_admin_bar. Добавьте этот код в файл functions.php вашей дочерней темы:
// Отключаем админ-бар полностью
add_filter('show_admin_bar', '__return_false');Что делает этот код? Он говорит WordPress не показывать админ-бар вообще никому из пользователей, включая администраторов. Это быстрое решение, но у него есть недостаток: WordPress все еще подключает CSS и JavaScript файлы админ-бара, которые добавляют лишние HTTP-запросы и могут влиять на производительность.
Способ 2: Полное удаление с очисткой ресурсов
Чтобы отключить админ-бар правильно и оптимизировать загрузку страницы, нужно не только скрыть его, но и убрать все связанные ресурсы. Используйте этот расширенный код:
/**
* Полное отключение админ-панели на фронтенде
*/
// Основное отключение админ-бара
add_filter('show_admin_bar', '__return_false');
// Удаляем все связанные с админ-баром ресурсы
function lakend_complete_admin_bar_removal() {
// Удаляем CSS
wp_dequeue_style('admin-bar');
wp_deregister_style('admin-bar');
// Удаляем скрипты
wp_dequeue_script('admin-bar');
wp_deregister_script('admin-bar');
// Удаляем inline-стили, которые добавляют отступы для body
remove_action('wp_head', '_admin_bar_bump_cb');
// Удаляем action для рендеринга админ-бара в футере
remove_action('wp_footer', 'wp_admin_bar_render', 1000);
// (Опционально) Убираем инициализацию админ-бара
remove_action('init', 'wp_admin_bar_init');
}
add_action('wp_enqueue_scripts', 'lakend_complete_admin_bar_removal', 9999);
// Убираем admin-bar класс из body
function lakend_remove_admin_bar_class($classes) {
if (($key = array_search('admin-bar', $classes)) !== false) {
unset($classes[$key]);
}
return $classes;
}
add_filter('body_class', 'lakend_remove_admin_bar_class');
// Убираем admin-bar класс из html тега
function lakend_remove_admin_bar_html_class($output) {
return preg_replace('/\sadmin-bar/', '', $output);
}
add_filter('language_attributes', 'lakend_remove_admin_bar_html_class');Почему этот способ лучше?
- Удаляет стили и скрипты: Функции
wp_dequeue_style/scriptиwp_deregister_style/scriptпредотвращают загрузку CSS и JS файлов админ-бара. - Убирает inline-стили: Хук
_admin_bar_bump_cbдобавляет в<head>инлайн-стили, которые создают отступ сверху дляbody. Это убирается. - Удаляет классы из HTML: WordPress добавляет класс
admin-barв теги<body>и<html>. Код выше полностью очищает разметку от этих классов, что гарантирует отсутствие конфликтов с вашими стилями.
Способ 3: Отключение через wp-config.php
Альтернативный способ, который работает на уровне конфигурации WordPress. Добавьте следующую строку в файл wp-config.php:
// Добавьте в wp-config.php перед require_once ABSPATH . 'wp-settings.php';
define('DISABLE_ADMIN_BAR', true);Плюсы: Работает глобально, независимо от темы. Минусы: Как и в первом способе, это просто скрывает панель, не удаляя связанные с ней ресурсы (стили, скрипты, классы).
Итог: Какой способ выбрать?
- Для быстрого решения используйте
add_filter('show_admin_bar', '__return_false');. - Для полного контроля и оптимизации берите Способ 2. Он не только скрывает панель, но и очищает код вашего сайта от ненужных элементов, что положительно скажется на производительности и избежит потенциальных конфликтов.
- Если вам важна независимость от темы (например, вы часто меняете темы), используйте определение в
wp-config.php, но будьте готовы дополнительно удалить стили и скрипты.
Рекомендуем всегда использовать Способ 2, так как он обеспечивает наиболее чистое и правильное отключение админ-панели.