Intereting Posts
Персонализированная авторская область Нужна помощь в получении определенного значения из многомерного массива Запрос WP с пользовательской таксономией Почему YoastSEO не позволяет мне указать заголовок / описание для главной страницы? Ошибка добавления данных в таблицу опций Контактная форма 7 Плагин отправляет письма в мой Gmail как спам TinyMCE делает насилие относительно относительных путей в коде Как загрузить тысячи изображений? Виджет боковой панели YouTube – недоступен сервис YouTube Использование двух разных пользователей БД при одной установке WP Сделать присвоение должности определенной категории, эквивалентной присвоению ее всем категориям Отправлять почту пользователю только один раз, когда выбран определенный флажок и обновлен из профиля, обновленного администратором Постоянное изменение во время сохранения сообщения добавить миниатюру youtube в индекс и single.php добавить видео Как добавить кнопку, которая позволяет пользователю вставлять ссылку в текстовое поле, расположенное в интерфейсе?

Замена функциональности меню WordPress плагином

Я спросил об этом ранее на StackOverflow.com, прежде чем понял, что для WordPress существует StackExchange. Вот ссылка на старый вопрос (для удаления модератора):

https://stackoverflow.com/questions/6862887/replacing-wordpress-core-functionality-with-a-plugin

Я создаю плагин WordPress для пользовательского макета меню. Мне хорошо известно, что я мог бы просто реализовать это меню непосредственно в теме, и я достаточно подробно ознакомился с функциями и ограничениями wp_nav_menu() , плюс я уже пробовал и тестировал каждый плагин, уже созданный для замены по умолчанию Меню WordPress.

Я хочу использовать плагин, так как мой клиент будет реализовывать его на нескольких сайтах WordPress, многие из которых работают по разным темам – и большинство из них – темы, которые я не создавал, и я не хочу переписывать их код в в случае, если они обновят тему в будущем.

Когда я рассмотрел способ реализации меню в теме, я обнаружил, что есть только два хороших метода, так как нет крюка или фильтра, вызываемых во время отображения меню. Во-первых, чтобы изменить тему, чтобы найти плагин (это похоже на метод, используемый PixoPoint и многими другими плагинами меню):

 header.php: if(function_exists('pixopoint_menu')){ pixopoint_menu(); } else { wp_nav_menu(); } 

Второй метод – это класс walker:

 plugin.php: class my_walker_class Extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) { /* * Etc. Etc. */ } } header.php: wp_nav_menu( Array( 'walker' => 'my_walker_class' ) ); 

Однако, как вы заметите, оба этих метода требуют изменения стандартного файла header.php.

В идеале я хотел бы просто заменить wp_nav_menu() если мой плагин загружен, так как это обеспечит мою поддержку плагинов для большинства тем без необходимости редактировать какие-либо файлы тем. Есть ли хороший способ сделать это? Или есть лучший способ написать плагин меню, который я не вижу?

Err … В системе меню есть много фильтров.

Фильтр 'wp_nav_menu' вызывается на выходе вызова функции wp_nav_menu (). Поэтому, если вам нужно изменить вывод меню, вы можете использовать его.

Фильтр 'wp_nav_menu_items' вызывается в результирующем массиве элементов (в основном все элементы LI).

Если вам нужно изменить аргументы, переданные в wp_nav_menu, например, чтобы динамически добавить собственный ходок, вы можете использовать для этого фильтр «wp_nav_menu_args».

Есть гораздо больше фильтров, которые более специфичны и, вероятно, могут быть использованы для изменения вещей более тонким образом. Это сортированные основные клубные фильтры, которые меняют все.