Intereting Posts
Как использовать Resposive Tables в WordPress ADMIN Pages? Пользовательские сообщения типа post не отображаются в виджетах архива Есть ли способ получить часть вызывающего шаблона? добавить класс span и i tag внутри тега привязки ссылок wp_nav_menu Термины таксономии в permalink Как получить данные формы? Тестирование локального сервера с помощью MAMP / wordpress на мобильном устройстве? Условная логика на основе пользовательской таксономии Использование переменных в функциях WordPress Translate Должен ли я использовать инструмент RIPS для тестирования моих тем и плагинов? Регистрация функции обратного вызова AJAX, которая является частью класса без создания экземпляра класса в функции function.php Множественные параметры порядка в действии pre_get_posts () get_posts () исключая всех детей определенной должности / страницы В чем разница между возможностями Role и Meta; Когда использовать фильтр map_meta_cap () Отображать поле пользовательского метабокса только при наличии значения

добавьте ссылки на верхний уровень в меню 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. Это лучший фильтр / способ достижения этого?

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

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

$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-кода меню.