Хук wp_nav_menu_args
предоставляет разработчикам возможность изменять аргументы, передаваемые в функцию wp_nav_menu()
, перед их обработкой. Это позволяет настраивать отображение меню, добавлять или изменять классы, идентификаторы и другие параметры, что делает его мощным инструментом для кастомизации навигации на сайте.
Этот фильтр позволяет изменять параметры меню, которые могут быть определены в родительской теме, что дает возможность дочерним темам и плагинам настраивать меню без изменения исходного кода родительской темы.
apply_filters( 'wp_nav_menu_args', array $args );
Параметры
$args
(массив): Массив аргументов для функцииwp_nav_menu()
, который может содержать такие параметры, какtheme_location
,container
,menu_class
и многие другие.
Пример 1: Изменение параметров для всех меню
В этом примере мы изменим параметры для всех меню, устанавливая fallback_cb
в false
и добавляя класс к меню.
add_filter( 'wp_nav_menu_args', 'modify_global_nav_menu_args' );
function modify_global_nav_menu_args( $args ) {
$args['fallback_cb'] = false; // Отключаем fallback
$args['menu_class'] = 'custom-menu-class'; // Устанавливаем кастомный класс
$args['item_spacing'] = 'discard'; // Отключаем расстояние между элементами
return $args;
}
Пример 2: Изменение параметров для конкретного меню
Здесь мы изменим параметры только для меню, которое выводится в области header-menu
. Также мы проверим, авторизован ли пользователь, и в зависимости от этого изменим название меню.
add_filter( 'wp_nav_menu_args', 'customize_header_menu_args' );
function customize_header_menu_args( $args ) {
if ( $args['theme_location'] === 'header-menu' ) {
$args['fallback_cb'] = false; // Отключаем fallback
$args['menu_class'] = 'header-custom-menu'; // Класс для заголовка
$args['item_spacing'] = 'discard'; // Отключаем расстояние между элементами
if ( ! is_user_logged_in() ) {
$args['menu'] = 'Меню для гостей'; // Меню для неавторизованных пользователей
}
}
return $args;
}
Пример 3: Установка идентификатора контейнера
В этом примере мы установим уникальный идентификатор контейнера для меню в области footer-menu
.
add_filter( 'wp_nav_menu_args', 'set_footer_menu_container_id' );
function set_footer_menu_container_id( $args ) {
if ( $args['theme_location'] === 'footer-menu' ) {
$args['container_id'] = 'footer-navigation'; // Уникальный ID для контейнера
}
return $args;
}
Пример 4: Добавление классов к элементам меню
С помощью этого примера мы можем добавить дополнительные классы ко всем элементам меню, что может помочь в стилизации.
add_filter( 'wp_nav_menu_args', 'add_classes_to_menu_items' );
function add_classes_to_menu_items( $args ) {
if ( $args['theme_location'] === 'primary' ) {
$args['menu_class'] .= ' additional-class'; // Добавляем новый класс
}
return $args;
}
Заключение
Хук wp_nav_menu_args
предоставляет разработчикам WordPress мощный инструмент для изменения и настройки параметров меню. С его помощью можно легко адаптировать меню под конкретные требования сайта, изменять классы, идентификаторы и другие параметры. Благодаря приведённым примерам вы можете использовать этот хук для создания уникального и функционального навигационного меню на вашем сайте.