Фильтр nav_menu_item_args
в WordPress позволяет изменять параметры отображения каждого пункта меню, создаваемого с помощью функции wp_nav_menu()
. Этот фильтр предоставляет широкие возможности кастомизации, такие как добавление иконок, изменение стилей или текста до и после ссылки. В данной статье рассмотрим основные аспекты работы с этим фильтром и примеры его применения.
apply_filters( 'nav_menu_item_args', stdClass $args, WP_Post $menu_item, int $depth )
Параметры
$args
(объектstdClass
): Аргументы, передаваемые вwp_nav_menu()
, такие какmenu_class
,theme_location
,depth
и другие.$menu_item
(объектWP_Post
): Объект данных текущего пункта меню, включающий ID, URL, название и другие параметры.$depth
(число): Уровень вложенности пункта меню. Например, верхний уровень —0
, подуровни —1
и выше.
Пример 1: Добавление иконок к пунктам меню в области primary
Этот пример добавляет иконку перед ссылками всех пунктов меню, размещенных в области primary
:
add_filter( 'nav_menu_item_args', 'add_icons_to_primary_menu_items', 10, 3 );
function add_icons_to_primary_menu_items( $args, $menu_item, $depth ) {
if ( $args->theme_location === 'primary' ) {
$args->link_before = '<span class="dashicons dashicons-smiley"></span> ';
}
return $args;
}
Пример 2: Добавление иконок только для страниц в меню
Этот код добавляет иконки перед ссылками только для тех пунктов меню, которые являются страницами (object == 'page'
), а остальные элементы остаются без иконок:
add_filter( 'nav_menu_item_args', 'add_icons_to_page_items', 10, 3 );
function add_icons_to_page_items( $args, $menu_item, $depth ) {
if ( $menu_item->object === 'page' ) {
$args->link_before = '<span class="dashicons dashicons-admin-page"></span> ';
}
return $args;
}
Пример 3: Добавление иконок только для элементов верхнего уровня
Этот пример добавляет иконку только к элементам верхнего уровня (depth === 0
):
add_filter( 'nav_menu_item_args', 'add_icons_to_top_level_items', 10, 3 );
function add_icons_to_top_level_items( $args, $menu_item, $depth ) {
if ( $depth === 0 ) {
$args->link_before = '<span class="dashicons dashicons-welcome-view-site"></span> ';
}
return $args;
}
Пример 4: Комбинация условий для добавления иконок
Здесь мы добавляем иконки только для тех пунктов меню, которые:
- Размещены в области
primary
; - Представляют собой страницы;
- Являются элементами верхнего уровня.
add_filter( 'nav_menu_item_args', 'add_icons_to_primary_top_level_page_items', 10, 3 );
function add_icons_to_primary_top_level_page_items( $args, $menu_item, $depth ) {
if ( $args->theme_location === 'primary' && $menu_item->object === 'page' && $depth === 0 ) {
$args->link_before = '<span class="dashicons dashicons-star-filled"></span> ';
}
return $args;
}
Пример 5: Изменение параметра link_after
для всех пунктов меню
С помощью фильтра можно добавить текст или HTML-код после каждой ссылки меню:
add_filter( 'nav_menu_item_args', 'add_text_after_menu_link', 10, 3 );
function add_text_after_menu_link( $args, $menu_item, $depth ) {
$args->link_after = ' <span class="menu-link-text">✓</span>';
return $args;
}
Фильтр nav_menu_item_args
можно использовать в следующих случаях:
- Добавление иконок или значков перед пунктами меню;
- Настройка различных стилей или HTML-элементов для ссылок в зависимости от уровня вложенности;
- Изменение текстов до или после ссылки в зависимости от типа пункта меню;
- Добавление уникальных атрибутов для каждого элемента меню в зависимости от области или позиции.
Заключение
Фильтр nav_menu_item_args
делает пункты меню более гибкими и позволяет добавлять индивидуальные элементы стиля или разметки, улучшая интерфейс сайта. С помощью этого хука можно настроить уникальные элементы для каждой области или уровня вложенности меню в WordPress.