Intereting Posts
Запросы AJAX ломаются из-за HTTPS для wp-admin Пользовательская лицензия для плагина WordPress Звуковой код shortclode не работает Комментарии невидимы, в чем проблема с wp_list_comments? Как использовать содержимое Github Gist для страницы без встраивания Добавить ссылку на страницу с привязкой Как отображать все фотографии со всех сообщений на одной странице? Шаблон search.php не загружает результаты Создание массива поиска из нескольких таблиц Как проверить, выполняется ли короткий код в виджетах или сообщениях Добавить фрагмент текста и изображения в гиперссылки? Отобразить все пользовательские термины таксономии и их соответствующие пользовательские сообщения Неустранимая ошибка: допустимый размер памяти, когда после использования enqueue_script Просмотр сообщений путем объединения нескольких мета ключей Исчезающая строка даты в url с wordpress

Фильтр 'nav_menu_css_class' принимает 2 или 3 аргумента?

Я использовал фильтр nav_menu_css_class в одном из моих плагинов, реализованный как:

 add_filter( 'nav_menu_css_class', 'wbwcrf_nav_menu_css_class', 10, 3 ); function wbwcrf_nav_menu_css_class( $classes, $item, $args ) { /* snip */ return $classes; } 

У фильтра явно есть 3 аргумента в коде ( источник ), но кто-то, использующий мой плагин, сказал мне, что они получают ошибку. Warning: Missing argument 3 for wbwcrf_nav_menu_css_class() .

Поэтому я просмотрел документацию по nav_menu_css_class на nav_menu_css_class которой есть пример с использованием 2 аргументов, я изменил свой код на 2 аргумента, так как я фактически не использую аргумент $ args, и все, кажется, работает нормально.

Но я все еще сильно зациклен на том, почему у источника есть 3 аргумента, но у кода есть 2 и почему я не получаю никаких ошибок при использовании 3 аргументов, но кто-то использует мой плагин. Любой, кто может очистить мою путаницу здесь, пожалуйста?

Я могу подтвердить, что этот фильтр применяется с тремя параметрами, как вы упомянули в своем фрагменте. Предупреждение очень странно и не должно появляться, если ядро ​​WordPress не было взломано.

Наилучшей практикой для этого случая является запрос параметров, которые требуются вашему крюку. Поэтому, если вы не используете $args , поэтому не запрашивайте его:

 add_filter( 'nav_menu_css_class', 'wbwcrf_nav_menu_css_class', 10, 2 ); function wbwcrf_nav_menu_css_class( $classes, $item ) { // ... } 

Другой подход – установить значения по умолчанию для аргументов дохода:

 add_filter( 'nav_menu_css_class', 'wbwcrf_nav_menu_css_class', 10, 3 ); function wbwcrf_nav_menu_css_class( $classes, $item, $args = array() ) { // ... }