Intereting Posts
Как отображать только сообщения, назначенные определенной, изолированной, подкатегории Мой WP_options db rewrite_rules не работает wp_query-> max_num_pages всегда возвращает 0 в пользовательском типе сообщения После обновления сайта для использования SSL все изображения в сообщениях указывают на http: // Ярлык клавиатуры для обновления страницы или сообщения? Где я могу получить «Информация об ошибке», чтобы добавить к вопросу? Как создать страницу пользовательского архива в зависимости от типа таксономии? Следующие сообщения, не работающие в специальном короткометражном типе сообщений Сортировка сообщений по настраиваемым значениям полей с помощью выпадающего меню Как реализовать функциональность WP_List_Table для настраиваемых плагинов (или любую замену для плагина wp_list_table) для массового действия Множественное, вложенное отношение tax_query Фильтр http_response_timeout не работает Вложенные запросы с использованием meta_query Как изменить значения базы данных при обновлении темы MySQL 5.6 вызывает ошибки с WP CLI

Фильтр '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() ) { // ... }