Intereting Posts
Две установки wordpress mu, одинаковые настройки / плагины / темы? Как получить дескриптор $ для всех установленных в очереди скриптов? Получить категории для определенной должности – Пользовательский тип сообщения register_post_type exclude_from_search аргумент не работает WooCommerce – Можно ли заменить загружаемый файл и разрешить существующему клиенту получить его? Атрибут srcset тега Img Как перечислить все имена и описания пользовательской таксономии Нужно ли префикс каждого класса CSS в рамках темы? Категоризация сообщений по местоположению Как применить фильтр «retrieve_password_message»? Как добавить текст в форму комментария #content textarea? Как я могу запросить все сообщения одного типа в моей многоуровневой установке? Как добавить боковую панель к теме Isola? Добавить HTML в LI wp_list_categories Показать все сообщения всех категорий, но исключая категорию на пользовательской странице блога с разбивкой на страницы моей темы

Walker_Nav_Menu не работает в wp_page_menu_args filter

Мне нужно скрыть определенные пункты навигации из меню (на основе функции защиты паролем), и мне не удается заставить мой пользовательский Уокер работать. На самом деле, я даже не могу заставить стандартный Walker_Nav_Menu работать, когда добавляю его через фильтр.

Я создал плагин следующим образом:

<?php function myplugin_page_menu_args( $args ) { $args['walker'] = new Walker_Nav_Menu; return $args; } add_filter( 'wp_page_menu_args', 'myplugin_page_menu_args' ); ?> 

В файле плагина нет другого кода, только эти 6 строк. Я добавил этот плагин к новой установке WordPress ( http://dev.matt-howe.co.uk/wordpress/ ), и отображение меню полностью сломано – все элементы находятся на одном уровне, и ни один из них есть любой текст. Выделяется правильное количество элементов <li> , и идентификаторы верны, но все остальное неверно.

Я пробовал использовать пользовательский класс с помощью метода .walk ():

 class myplugin_walker { function walk ( $elements, $to_depth ) { return 'test'; } } function myplugin_page_menu_args( $args ) { $args['walker'] = new myplugin_walker; return $args; } add_filter( 'wp_page_menu_args', 'myplugin_page_menu_args' ); 

Это работает точно так, как ожидалось – меню отображается как «тест». Но попытка использовать либо мой собственный класс, который расширяет Walker_Nav_Menu , или основной класс Walker_Nav_Menu , приводит к плоскому списку пустых тегов <li> .

Я пробовал еще несколько способов добиться того же результата – я попытался добавить фильтры для wp_nav_menu_objects и wp_get_nav_menu_items но ни одна из моих функций, похоже, вообще не вызвана.

Я лаяю неправильное дерево здесь – это то, что не будет работать как часть плагина и должно быть где-то еще в коде? Или я просто пропущу что-то очевидное?

Старый Q, но я дам свои 2 цента.

  1. Класс walker должен наследовать Walker_Page , а не Walker_Nav_Menu как это обычно бывает с проводниками в сети.
  2. Объектом $item является объект Post , содержащий post_title и ID . Чтобы вывести URL-адрес, вам нужно вызвать get_permalink($item-ID) . Что касается $item->url , он будет отменен.
  3. И theme_location и fallback_cb должны быть не присутствующими в массиве $args заданном wp_nav_menu .