Intereting Posts
Мне нужна команда SQL для удаления конкретных авторов и всех связанных с ними сообщений Разрешить повторный адрес электронной почты для разных пользователей Как я могу изменить сообщение? Могу ли я использовать `.phtml` вместо` .php` Вход для нижнего колонтитула WordPress Добавление тегов при создании нового сообщения Не удалось обновить wordpress до версии 4.0 Admin первый крюк, который выводит HTML? Сортировка по двум переменным Почему URL-адрес настраиваемого типа сообщений «/? Cposts = name-of-the-post», но URL-адрес почтового индекса по умолчанию «/? P = ID»? Пользовательские меню Описание Отключение HTML-тегов Как обновить метаданные wp_postmeta WordPress, содержащие множество опций WPAlchemy MediaAccess, вставляющий медиа-ссылку в редакторе WP вместо пользовательского поля в метабоксе Определение того, какая публикация отображается из общих сообщений Контактная форма 7 проблема с jquery – скрытие / отображение полей

как определить, сколько и какие аргументы передаются на крючки

Я не могу понять, какая логика для add_action / add_filter

Рассмотрим следующий пример:

function SearchFilter($query) { if ($query->is_search) { $query->set('post_type', 'page'); } return $query; } add_filter('pre_get_posts','SearchFilter'); 

Мои вопросы:

  • Как я могу узнать, что функция wheter «SearchFilter» принимает любой аргумент или нет?

  • Какой будет этот аргумент / какой будет его тип?

  • Как определить, для какого действия / фильтра есть какой-либо аргумент?

  • Должно ли каждое действие / фильтр возвращать переданный параметр?

Solutions Collecting From Web of "как определить, сколько и какие аргументы передаются на крючки"

При вызове крюка действия с использованием

 add_action('some_action_tag','callback_function',$priority,$number_of_arguments); 

Функция обратного вызова вызывается, когда do_action() запускается с соответствующим тегом, например:

 do_action('some_action_tag',$argument1,$argument2,$argument3....); 

И при вызове фильтра-крючка, используя:

 add_filter('some_filter_tag','callback_function',$priority,$number_of_arguments); 

Функция обратного вызова вызывается, когда apply_filters() запускается с соответствующим тегом, например:

 $value = apply_filters('some_filter_tag',$argument1,$argument2,$argument3...); 

Теперь, поскольку вы можете видеть, что основное отличие состоит в том, что крюк действия в основном позволяет вам запускать вашу собственную функцию в данной точке, а крючок фильтра позволяет вам фильтровать (изменять / изменять / очищать …) значение конкретной переменной.

Таким образом, действие «hooked» callback_function принимает аргументы только в том случае, если они были указаны, и фильтр «hooked» callback_function принимает хотя бы один аргумент, который является значением, чтобы изменить себя и больше аргументов, только если указано.

Что касается вопросов

Как я могу узнать, принимает ли функция «SearchFilter» любой аргумент или нет?

Зацепившая функция (в данном случае SearchFilter) принимает любые аргументы, которые запускают триггер hook (или apply_filters () для крючков фильтра или do_action () для крючков действия), и лучший способ узнать, что они собой представляют для поиска кода для метки крюка (например, searchFilter) и посмотреть, что они собой представляют. Однако, как указано выше, поскольку мы подключаем его к крючку фильтра, у него будет хотя бы один аргумент.

Какой будет этот аргумент / какой будет его тип? Как определить, для какого действия / фильтра есть какой-либо аргумент?

То же, что и выше, вы можете видеть это в функции триггера крюка или путем создания тестового дампа, который будет чем-то вроде этого?

 function test_dump($a1=null,$a2=null,$a3=null,$a4=null,$a5=null){ if ($a1 !== null){ echo '<pre>first argument: <br/>'; var_dump($a); echo '</pre>'; } if ($a2 !== null){ echo '<pre>2nd argument: <br/>'; var_dump($a); echo '</pre>'; } if ($a3 !== null){ echo '<pre>3rd argument: <br/>'; var_dump($a); echo '</pre>'; } if ($a4 !== null){ echo '<pre>4th argument: <br/>'; var_dump($a); echo '</pre>'; } if ($a5 !== null){ echo '<pre>5th argument: <br/>'; var_dump($a); echo '</pre>'; } } 

Должно ли каждое действие / фильтр возвращать переданный параметр?

Крюки действия не ожидают возвращаемого значения, поэтому нет, но крючок фильтра должен возвращать значение почти каждый раз.

Лучший способ получить аргументы – найти вызов do_action для того, что вы используете в коде. У этого раздела есть большой раздел. Вот тот, который вам понадобится.