В процессе разработки и настройки WordPress-сайта часто возникает ситуация, когда в теме отображается пустое меню, которое не содержит пунктов. Это может привести к проблемам с дизайном и пользовательским опытом. В этой статье мы подробно рассмотрим, как эффективно удалить пустое меню в WordPress, используя как код, так и плагины.
Почему появляется пустое меню в WordPress
Пустое меню появляется по нескольким причинам:
- Меню зарегистрировано, но для него не назначены пункты в админке;
- В теме вызов меню происходит без проверки на наличие пунктов;
- Плагин или кастомный код создает меню, но не наполняет его ссылками.
Пустое меню не только портит внешний вид сайта, но и может сбивать с толку посетителей. Поэтому важно «прятать» или удалять такие меню.
Удаление пустого меню через код в functions.php
Первый способ решения — это добавить проверку в файл functions.php вашей темы или в собственный плагин, которая будет выводить меню только если у него есть пункты.
Вот пример функции с префиксом wpmark_, которая проверяет наличие пунктов меню и выводит меню только если оно не пустое:
function wpmark_display_menu_if_not_empty($location) {
if (has_nav_menu($location)) {
$menu_items = wp_get_nav_menu_items(get_nav_menu_locations()[$location]);
if (!empty($menu_items)) {
wp_nav_menu(array('theme_location' => $location));
}
}
}Использовать функцию в шаблоне темы можно так:
<?php wpmark_display_menu_if_not_empty('primary'); ?>Здесь 'primary' — это идентификатор зарегистрированного меню. Если меню пустое — оно не выведется вовсе.
Регистрация меню с учетом проверки
Если вы регистрируете меню в functions.php, то делайте это стандартно:
function wpmark_register_menus() {
register_nav_menus(array(
'primary' => 'Основное меню',
'footer' => 'Меню в подвале'
));
}
add_action('after_setup_theme', 'wpmark_register_menus');Далее в шаблонах выводите меню через нашу функцию с проверкой, чтобы не показывать пустые меню.
Использование плагинов для управления меню и удаления пустых
Если вы не хотите лезть в код, можно использовать плагины, которые помогают контролировать отображение меню.
Плагин Nav Menu Roles
Плагин Nav Menu Roles позволяет задавать условия отображения пунктов меню, например, по ролям пользователя. С его помощью можно скрыть пункты, чтобы меню не было пустым, либо убрать меню для определенных пользователей.
Плагин If Menu – Visibility control for Menu Items
Этот плагин добавляет условия видимости для пунктов меню. Можно настроить, чтобы пустые пункты не отображались, а меню, в котором нет видимых пунктов, автоматически скрывалось.
Автоматическое удаление пустых меню через хуки
Можно также использовать фильтры для удаления пустых меню на уровне WordPress. Например, при выводе меню с помощью wp_nav_menu можно применить фильтр wp_nav_menu_args, чтобы менять аргументы вывода.
function wpmark_filter_nav_menu_args($args) {
$locations = get_nav_menu_locations();
if (isset($locations[$args['theme_location']])) {
$menu_items = wp_get_nav_menu_items($locations[$args['theme_location']]);
if (empty($menu_items)) {
$args['fallback_cb'] = false; // отключаем fallback
$args['menu'] = false; // не выводим меню
}
}
return $args;
}
add_filter('wp_nav_menu_args', 'wpmark_filter_nav_menu_args');Этот фильтр проверяет наличие пунктов у меню и если их нет, то отключает вывод меню и fallback.
Пример комплексного решения для темы Reboot
Если вы используете тему Reboot от WPSHOP, то можно встроить вышеописанную функцию wpmark_display_menu_if_not_empty в шаблон header.php. Это позволит избежать пустых областей меню при отсутствии пунктов.
Также рекомендую использовать плагин Clearfy Pro, который оптимизирует работу WordPress и может помочь управлять выводом разных элементов, включая меню.
Советы по работе с меню в WordPress
Для предотвращения появления пустых меню следуйте простым рекомендациям:
- Регулярно проверяйте назначение пунктов меню в админке;
- Используйте кастомные функции с проверками, как в нашем примере;
- Используйте условные теги WordPress для контроля вывода меню;
- Включайте fallback меню с осмысленным содержанием или отключайте fallback;
- При разработке темы тестируйте вывод меню на пустых и заполненных локациях.
Итог
Удаление пустых меню в WordPress — задача простая, но требующая внимания к деталям. Используйте функции с проверкой пунктов меню, фильтры для управления выводом и при необходимости плагины для удобства. Это улучшит внешний вид и UX вашего сайта.