Intereting Posts
Как отображать имя продукта в алфавитном порядке в пользовательском поле (таксономия)? get_pages () Возвращает только один элемент Восстановить wordpress, заменив файл вручную Редактировать функцию_события Скопируйте файл из плагина в каталог темы Предотвратить создание WordPress при загрузке изображений medium_large 768px? Магазин WooCommerce с ~ 30 000 продуктами Выберите персонализированные сообщения с помощью meta_value и отсортируйте их с помощью другого мета-значения Использование pre_get_posts для мета значения LIKE-сравнения в подполе ACF-повторителя Использовать html-теги в shortcode_atts, это реально? Отображать настраиваемое поле на 404 страницах вне цикла Удаление категорий / тегов из меню администратора как правильно использовать комментарии-template.php WordPress WP_Query () Не работает должным образом Постоянная ссылка изменяется при редактировании опубликованной публикации в пользовательском типе сообщения

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

Я не могу понять, какая логика для 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» принимает любой аргумент или нет?

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

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

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

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

 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 для того, что вы используете в коде. У этого раздела есть большой раздел. Вот тот, который вам понадобится.