Intereting Posts
Как заставить поисковую систему указывать на продукты woocommerce Показать сообщения для текущей таксономии Как использовать переходный процесс внутри WP_User_Query как создать ярлык значка fav? Как обрабатывать короткие коды при использовании JSON API Расположение метаданных изображения на моем сервере Когда следует использовать add_rewrite_tag ()? захватить соседний контент в запросе WYSIWYG ясно: оба Загруженные изображения не изменяются до размера (миниатюр, среднего и большого) размера Запланированные сообщения и wp-cron – Почему опубликованные публикации не публикуются, если они слишком стары? Специальная проблема с пользовательским интерфейсом пользовательского навигационного меню Создание страниц для содержимого базы данных Хостинг альтернативы WordPress.com Как перечислить 2 таксономических условия для должности, исходя из их иерархии

добавьте ссылки на верхний уровень в меню wordpress, называемое «основным»,

Я хочу добавить диапазон к ссылкам верхнего уровня в меню wordpress, называемом «main».

Желаемый вывод html (классы wordpress, удаленные для четкого визуального) выглядел бы так:

     <ul> <li><a href="#"><span>Link</span></a></li> <li><a href="#"><span>Link</span></a> <ul> <li><a href="#">Sub Link (no span)</a></li> <li><a href="#">Sub Link (no span)</a></li> <li><a href="#">Sub Link (no span)</a></li> </ul> </li> <li><a href="#"><span>Link</span></a></li> <li><a href="#"><span>Link</span></a></li> </ul> 

Я нашел этот фильтр wordpress некоторое время назад, когда Googling (скорее всего, переполнение стека, не могу вспомнить, где), которое прекрасно добавляет диапазон, но добавляет его в каждое меню в моей теме.

 add_filter( 'wp_nav_menu_objects', function( $items ) { foreach ( $items as $item ) { if (!$item->menu_item_parent) { $item->title = '<span>' . $item->title . '</span>'; } } return $items; }); 

Q1. Есть ли способ добавить этот фильтр только в меню main?

Q2. Это лучший фильтр / способ достижения этого?

Спасибо за любую помощь.

$args , второй параметр, переданный в wp_nav_menu_objects может использоваться для проверки, какое меню обрабатывается. Это позволит нам настроить таргетинг только на нужное меню.

В приведенном ниже коде мы проверяем, является ли пул главного меню, и если да, оберните пункты меню верхнего уровня в тегах span.

 /** * Filters the sorted list of menu item objects before generating the menu's HTML. * * @param array $sorted_menu_items The menu items, sorted by each menu item's menu order. * @param stdClass $args An object containing wp_nav_menu() arguments. */ add_filter( 'wp_nav_menu_objects', 'wpse_wp_nav_menu_objects', 10, 2 ); function wpse_wp_nav_menu_objects( $sorted_menu_items, $args ) { // Only modify the "main" menu. if ( ! isset( $args->menu->slug ) || 'main' !== $args->menu->slug ) { return $sorted_menu_items; } // Loop over the menu items wrapping only top level items in span tags. foreach ( $sorted_menu_items as $item ) { if ( ! $item->menu_item_parent ) { $item->title = '<span>' . $item->title . '</span>'; } } return $sorted_menu_items; } 

Фильтр выше будет технически работать для всех меню, но с нашей проверкой на месте он будет влиять только на нужное меню.

Является ли wp_nav_menu_objects лучшим фильтром для обсуждения, но я думаю, что это хорошо подходит для решения проблемы. Это, безусловно, лучше, чем использование одного из более поздних фильтров, таких как wp_nav_menu_items , wp_nav_menu_{$menu->slug}_items или wp_nav_menu чего потребуется разбор HTML-кода меню.