wp_nav_menu

Позволяет изменить HTML-содержимое меню навигации
Хук WordPress
INT 3.0.0
WordPress Icon
Содержание
  1. Описание хука
  2. Примеры использования
  3. Изменение HTML содержимого навигационного меню
  4. Создание кастомного класса для элементов меню
  5. Добавление атрибута aria-label для навигационного элемента
  6. Установка callback функции в случае отсутствия меню
  7. Изменение текста перед и после ссылки
  8. Изменение текста перед и после ссылочного текста
  9. Отключение вывода меню на экран
  10. Ограничение уровня вложенности меню
  11. Использование кастомного класса для обхода меню
  12. Выбор тематической области для меню
  13. Настройка обертки для элементов списка
  14. Управление пробелами в HTML меню
  15. Вопросы и ответы
  16. Как изменить классы ul элемента меню?
  17. Как изменить ID ul элемента меню?
  18. Как изменить контейнер, в котором обернуто меню?
  19. Как изменить класс контейнера меню?
  20. Как изменить ID контейнера меню?
  21. Как изменить aria-label атрибут контейнера меню?
  22. Как изменить callback функцию, если меню не существует?
  23. Как изменить текст перед разметкой ссылки?
  24. Как изменить текст после разметки ссылки?
  25. Связанные элементы

Описание хука

Хук «wp_nav_menu» позволяет определить и изменить HTML-контент для навигационного меню. Этот хук используется для фильтрации и изменения выводимого HTML-кода навигационного меню, что позволяет разработчикам вносить изменения в структуру и внешний вид меню.

Использование

apply_filters( 'wp_nav_menu', string $nav_menu, stdClass $args )

Хук «wp_nav_menu» используется в функции wp_nav_menu() для фильтрации HTML-контента навигационного меню перед его выводом. Возвращает измененный HTML-контент.

  • $nav_menu (string) — HTML-контент для навигационного меню.
  • $args (stdClass) — Объект, содержащий аргументы wp_nav_menu().
  • $args->menu (int|string|WP_Term) — Идентификатор, слаг, имя или объект меню.
  • $args->menu_class (string) — CSS-класс для элемента ul, формирующего меню. По умолчанию ‘menu’.
  • $args->menu_id (string) — ID, применяемый к элементу ul, формирующему меню. По умолчанию — слаг меню с инкрементом.
  • $args->container (string) — Обернуть ли элемент ul и каким элементом. По умолчанию ‘div’.
  • $args->container_class (string) — Класс, применяемый к контейнеру. По умолчанию ‘menu-{menu slug}-container’.
  • $args->container_id (string) — ID, применяемый к контейнеру.
  • $args->container_aria_label (string) — Значение атрибута aria-label, применяемого к контейнеру, если он является элементом nav.
  • $args->fallback_cb (callable|false) — Функция обратного вызова, которая будет вызвана, если меню не существует. По умолчанию ‘wp_page_menu’. Установите значение false, чтобы отключить резервное меню.
  • $args->before (string) — Текст перед разметкой ссылки.
  • $args->after (string) — Текст после разметки ссылки.
  • $args->link_before (string) — Текст перед текстом ссылки.
  • $args->link_after (string) — Текст после текста ссылки.
  • $args->echo (bool) — Выводить ли меню или возвращать его. По умолчанию true.
  • $args->depth (int) — Сколько уровней иерархии должно быть включено. 0 означает все уровни. По умолчанию 0.
  • $args->walker (object) — Экземпляр пользовательского класса обходчика.
  • $args->theme_location (string) — Местоположение темы, которое будет использоваться. Должно быть зарегистрировано с помощью функции register_nav_menu(), чтобы быть доступным для выбора пользователем.
  • $args->items_wrap (string) — Как обернуть элементы списка. Использует формат printf() с номерованными заполнителями. По умолчанию — ul с id и классом.
  • $args->item_spacing (string) — Сохранять ли пробелы в HTML-разметке меню. Принимает значения ‘preserve’ или ‘discard’. По умолчанию ‘preserve’.
<?php
/**
 * Пример использования хука wp_nav_menu
 *
 * @param string   $nav_menu HTML-контент для навигационного меню.
 * @param stdClass $args     Объект, содержащий аргументы wp_nav_menu().
 * @return string Измененный HTML-контент.
 */
function custom_nav_menu( $nav_menu, $args ) {
    // Ваш код для изменения HTML-контента навигационного меню
    return $nav_menu;
}
add_filter( 'wp_nav_menu', 'custom_nav_menu', 10, 2 );
?>

В приведенном выше примере кода определена пользовательская функция «custom_nav_menu», которая принимает два параметра: $nav_menu (HTML-контент для навигационного меню) и $args (объект, содержащий аргументы wp_nav_menu()). Внутри функции вы можете внести изменения в HTML-контент навигационного меню и вернуть измененный контент с помощью оператора return. Затем хук «wp_nav_menu» используется для применения этой пользовательской функции к HTML-контенту навигационного меню.

Примеры использования

Изменение HTML содержимого навигационного меню


function custom_nav_menu( $nav_menu, $args ) {
    // Изменение HTML содержимого навигационного меню
    return $nav_menu;
}
add_filter( 'wp_nav_menu', 'custom_nav_menu', 10, 2 );

В данном примере хук ‘wp_nav_menu’ используется для изменения HTML содержимого навигационного меню. Функция ‘custom_nav_menu’ принимает два параметра: $nav_menu (строка) — HTML содержимое навигационного меню, и $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). Функция должна вернуть измененное HTML содержимое меню.

Создание кастомного класса для элементов меню


function custom_menu_class( $args ) {
    // Создание кастомного класса для элементов меню
    $args->menu_class = 'custom-menu-class';
    return $args;
}
add_filter( 'wp_nav_menu_args', 'custom_menu_class' );

В данном примере хук ‘wp_nav_menu_args’ используется для создания кастомного класса для элементов меню. Функция ‘custom_menu_class’ принимает один параметр $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). В данном примере устанавливается значение свойства ‘menu_class’ в ‘custom-menu-class’.

Добавление атрибута aria-label для навигационного элемента


function custom_menu_aria_label( $args ) {
    // Добавление атрибута aria-label для навигационного элемента
    $args->container_aria_label = 'Main Menu';
    return $args;
}
add_filter( 'wp_nav_menu_args', 'custom_menu_aria_label' );

В данном примере хук ‘wp_nav_menu_args’ используется для добавления атрибута aria-label для навигационного элемента. Функция ‘custom_menu_aria_label’ принимает один параметр $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). В данном примере устанавливается значение свойства ‘container_aria_label’ в ‘Main Menu’.

Установка callback функции в случае отсутствия меню


function custom_menu_fallback( $args ) {
    // Установка callback функции в случае отсутствия меню
    $args->fallback_cb = 'custom_menu_callback';
    return $args;
}
add_filter( 'wp_nav_menu_args', 'custom_menu_fallback' );
function custom_menu_callback() {
    // Callback функция для отображения меню по умолчанию
    echo 'No menu found.';
}

В данном примере хук ‘wp_nav_menu_args’ используется для установки callback функции в случае отсутствия меню. Функция ‘custom_menu_fallback’ принимает один параметр $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). В данном примере устанавливается значение свойства ‘fallback_cb’ в ‘custom_menu_callback’. Функция ‘custom_menu_callback’ является callback функцией, которая будет вызвана в случае отсутствия меню и выведет сообщение ‘No menu found.’

Изменение текста перед и после ссылки


function custom_menu_link_text( $item_output, $item, $depth, $args ) {
    // Изменение текста перед и после ссылки
    $item_output = '<span class="before-link">Before</span>' . $item_output . '<span class="after-link">After</span>';
    return $item_output;
}
add_filter( 'walker_nav_menu_start_el', 'custom_menu_link_text', 10, 4 );

В данном примере хук ‘walker_nav_menu_start_el’ используется для изменения текста перед и после ссылки. Функция ‘custom_menu_link_text’ принимает четыре параметра: $item_output (строка) — HTML код ссылки, $item (object) — объект элемента меню, $depth (int) — уровень вложенности элемента меню, $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). В данном примере текст ‘Before’ добавляется перед ссылкой, а текст ‘After’ добавляется после ссылки.

Изменение текста перед и после ссылочного текста


function custom_menu_link_text( $item_output, $item, $depth, $args ) {
    // Изменение текста перед и после ссылочного текста
    $item_output = str_replace( '</a>', '<span class="before-link-text">Before</span></a><span class="after-link-text">After</span>', $item_output );
    return $item_output;
}
add_filter( 'walker_nav_menu_start_el', 'custom_menu_link_text', 10, 4 );

В данном примере хук ‘walker_nav_menu_start_el’ используется для изменения текста перед и после ссылочного текста. Функция ‘custom_menu_link_text’ принимает четыре параметра: $item_output (строка) — HTML код ссылки, $item (object) — объект элемента меню, $depth (int) — уровень вложенности элемента меню, $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). В данном примере текст ‘Before’ добавляется перед ссылочным текстом, а текст ‘After’ добавляется после ссылочного текста.

Отключение вывода меню на экран


function custom_menu_echo( $args ) {
    // Отключение вывода меню на экран
    $args->echo = false;
    return $args;
}
add_filter( 'wp_nav_menu_args', 'custom_menu_echo' );

В данном примере хук ‘wp_nav_menu_args’ используется для отключения вывода меню на экран. Функция ‘custom_menu_echo’ принимает один параметр $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). В данном примере устанавливается значение свойства ‘echo’ в false.

Ограничение уровня вложенности меню


function custom_menu_depth( $args ) {
    // Ограничение уровня вложенности меню
    $args->depth = 1;
    return $args;
}
add_filter( 'wp_nav_menu_args', 'custom_menu_depth' );

В данном примере хук ‘wp_nav_menu_args’ используется для ограничения уровня вложенности меню. Функция ‘custom_menu_depth’ принимает один параметр $args (stdClass) — объект, содержащий аргументы функции wp_nav_menu(). В данном примере устанавливается значение свойства ‘depth’ в 1.

Использование кастомного класса для обхода меню


class Custom_Walker_Nav_Menu extends Walker_Nav_Menu {
    // Использование кастомного класса для обхода меню
}
$args = array(
    'walker' => new Custom_Walker_Nav_Menu()
);
wp_nav_menu( $args );

В данном примере создается кастомный класс ‘Custom_Walker_Nav_Menu’, который наследуется от базового класса ‘Walker_Nav_Menu’. Затем создается объект этого класса и передается в аргумент ‘walker’ функции wp_nav_menu(). Это позволяет использовать кастомный класс для обхода меню.

Выбор тематической области для меню


$args = array(
    'theme_location' => 'primary'
);
wp_nav_menu( $args );

В данном примере используется аргумент ‘theme_location’ для выбора тематической области для меню. Значение ‘primary’ указывает на регистрированную тематическую область с именем ‘primary’. Меню, связанное с этой тематической областью, будет выведено на экран.

Настройка обертки для элементов списка


$args = array(
    'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>'
);
wp_nav_menu( $args );

В данном примере используется аргумент ‘items_wrap’ для настройки обертки для элементов списка. Значение ‘

    %3$s

‘ определяет формат обертки, где %1$s заменяется на ID меню, %2$s — на CSS класс меню, а %3$s — на HTML код элементов списка.

Управление пробелами в HTML меню


$args = array(
    'item_spacing' => 'discard'
);
wp_nav_menu( $args );

В данном примере используется аргумент ‘item_spacing’ для управления пробелами в HTML меню. Значение ‘discard’ указывает на отбрасывание пробелов между элементами меню. Это позволяет уменьшить размер HTML кода меню.

Вопросы и ответы

Как изменить классы ul элемента меню?

Для изменения классов ul элемента меню в WordPress можно использовать хук nav_menu_css_class. Этот хук позволяет добавить или удалить классы из массива классов, которые применяются к ul элементу меню.

Пример использования хука nav_menu_css_class:

// Добавляем класс "my-menu" к ul элементу меню
function my_menu_class( $classes ) {
    $classes[] = 'my-menu';
    return $classes;
}
add_filter( 'nav_menu_css_class', 'my_menu_class' );

Как изменить ID ul элемента меню?

Для изменения ID ul элемента меню в WordPress можно использовать хук nav_menu_item_id. Этот хук позволяет изменить ID, который применяется к ul элементу меню.

Пример использования хука nav_menu_item_id:

// Изменяем ID на "my-menu"
function my_menu_id( $menu_id, $item ) {
    return 'my-menu';
}
add_filter( 'nav_menu_item_id', 'my_menu_id', 10, 2 );

Как изменить контейнер, в котором обернуто меню?

Для изменения контейнера, в котором обернуто меню в WordPress, можно использовать хук wp_nav_menu_container_allowedtags. Этот хук позволяет изменить разрешенные теги контейнера.

Пример использования хука wp_nav_menu_container_allowedtags:

// Изменяем контейнер на "nav"
function my_menu_container( $tags ) {
    $tags['div'] = 'nav';
    return $tags;
}
add_filter( 'wp_nav_menu_container_allowedtags', 'my_menu_container' );

Как изменить класс контейнера меню?

Для изменения класса контейнера меню в WordPress можно использовать аргумент container_class при вызове функции wp_nav_menu(). По умолчанию значение этого аргумента равно ‘menu-{menu slug}-container’, где {menu slug} — это слаг меню.

Пример использования:


$args = array(
    'container_class' => 'my-menu-container'
);
wp_nav_menu($args);

Как изменить ID контейнера меню?

Для изменения ID контейнера меню в WordPress можно использовать аргумент container_id при вызове функции wp_nav_menu(). По умолчанию значение этого аргумента равно слаг меню, увеличенный на единицу.

Пример использования:


$args = array(
    'container_id' => 'my-menu-container'
);
wp_nav_menu($args);

Как изменить aria-label атрибут контейнера меню?

Для изменения атрибута aria-label контейнера меню в WordPress можно использовать аргумент container_aria_label при вызове функции wp_nav_menu(). По умолчанию значение этого аргумента не задано.

Пример использования:


$args = array(
    'container_aria_label' => 'Main Menu'
);
wp_nav_menu($args);

Как изменить callback функцию, если меню не существует?

Если меню не существует, можно изменить callback функцию, которая будет вызвана. По умолчанию используется функция ‘wp_page_menu’. Чтобы изменить callback функцию, необходимо установить параметр ‘fallback_cb’ в значение желаемой функции.


$args = array(
    'fallback_cb' => 'my_custom_menu_function'
);
wp_nav_menu( $args );

Как изменить текст перед разметкой ссылки?

Чтобы изменить текст, который будет отображаться перед разметкой ссылки, необходимо установить параметр ‘before’ в желаемый текст.


$args = array(
    'before' => 'Before Link Text'
);
wp_nav_menu( $args );

Как изменить текст после разметки ссылки?

Чтобы изменить текст, который будет отображаться после разметки ссылки, необходимо установить параметр ‘after’ в желаемый текст.


$args = array(
    'after' => 'After Link Text'
);
wp_nav_menu( $args );

Хук wp_nav_menu предоставляет возможность изменять HTML-контент для навигационных меню. Используя различные параметры, можно настроить различные аспекты меню, такие как callback функция, текст перед и после разметки ссылки. Это позволяет разработчикам WordPress создавать настраиваемые и гибкие навигационные меню для своих сайтов.

Связанные элементы

  • Функция wp_nav_menu(): выводит HTML-код для навигационного меню.
  • Функция register_nav_menu(): регистрирует новое местоположение меню.
  • Функция unregister_nav_menu(): отменяет регистрацию местоположения меню.
  • Хук wp_nav_menu_items: позволяет изменить HTML-код элементов меню перед выводом.
  • Хук wp_nav_menu_container_allowedtags: позволяет изменить список разрешенных тегов контейнера меню.
  • Класс Walker_Nav_Menu: базовый класс для создания пользовательского обходчика меню.
  • Класс Walker_Nav_Menu_Edit: класс для создания пользовательского обходчика меню в режиме редактирования.
  • Класс Walker_Nav_Menu_Checklist: класс для создания пользовательского обходчика меню в виде чекбоксов.
Обсуждение