Хук wp_nav_menu
позволяет разработчикам изменять HTML-контент, создаваемый функцией wp_nav_menu()
, прежде чем он будет выведен на экран. Это даёт возможность кастомизировать навигацию на сайте, добавляя или изменяя элементы, оберки и атрибуты, а также создавать уникальные структуры меню.
apply_filters( 'wp_nav_menu', string $nav_menu, stdClass $args );
Хук применяется к HTML-коду меню, который генерируется функцией wp_nav_menu()
. С его помощью можно изменять существующий HTML-код, добавлять дополнительные элементы или обертывать меню в новые контейнеры.
Параметры
$nav_menu
(строка): HTML-содержимое навигационного меню.$args
(stdClass): Объект, содержащий аргументы, переданные вwp_nav_menu()
, такие какtheme_location
,container
,menu_class
и т. д.
Пример 1: Обертывание меню в специальный контейнер
В этом примере мы добавим обертку для всего меню, используя тег section
.
add_filter( 'wp_nav_menu', 'wrap_menu_in_section', 10, 2 );
function wrap_menu_in_section( $nav_menu, $args ) {
return '<section class="menu-container">' . $nav_menu . '</section>';
}
Пример 2: Добавление кастомного класса к меню
Если вы хотите добавить кастомный класс к контейнеру меню, вы можете сделать это следующим образом:
add_filter( 'wp_nav_menu', 'add_custom_class_to_menu', 10, 2 );
function add_custom_class_to_menu( $nav_menu, $args ) {
$custom_class = 'custom-menu-class'; // Определите класс
return '<div class="' . $custom_class . '">' . $nav_menu . '</div>';
}
Пример 3: Замена ссылок в меню
С помощью этого фильтра можно заменить определенные ссылки в меню, например, если нужно изменить URL для определенных пунктов.
add_filter( 'wp_nav_menu', 'replace_menu_links', 10, 2 );
function replace_menu_links( $nav_menu, $args ) {
$nav_menu = str_replace( 'http://wp-test.ru/post-99', 'http://example.com/contact', $nav_menu ); // Замена ссылки
return $nav_menu;
}
Пример 4: Добавление нового элемента в меню
Также можно добавить новый элемент в уже сгенерированное меню. Это может быть полезно для добавления динамических ссылок.
add_filter( 'wp_nav_menu', 'add_dynamic_menu_item', 10, 2 );
function add_dynamic_menu_item( $nav_menu, $args ) {
$new_item = '<li class="menu-item"><a href="http://example.com/new-item">Новый элемент</a></li>';
return $nav_menu . $new_item; // Добавляем новый элемент в конец меню
}
Пример 5: Удаление элементов из меню
Если необходимо удалить определённые элементы из меню, можно использовать регулярные выражения.
add_filter( 'wp_nav_menu', 'remove_menu_items', 10, 2 );
function remove_menu_items( $nav_menu, $args ) {
// Удаление пункта с конкретным ID
$nav_menu = preg_replace('/<li[^>]*id="menu-item-265"[^>]*>.*?<\/li>/is', '', $nav_menu);
return $nav_menu;
}
Заключение
Хук wp_nav_menu
предоставляет мощные возможности для изменения HTML-кода навигационных меню в WordPress. С его помощью можно легко добавлять, изменять или удалять элементы меню, создавая уникальные и адаптированные под нужды вашего сайта структуры навигации. Надеюсь, приведенные примеры помогут вам эффективно использовать этот хук в своих проектах.