Перехваченные функции никогда не будут переопределять другие перехваченные функции, которые используют то же действие или зацепку фильтра .
Они добавляются в своего рода "очередь перехвата" с порядком выполнения, основанным на правилах приоритета:
- Если указан приоритет, они будут упорядочены в очереди сначала по приоритету перехвата и по приоритету объявления.
- Еслиприоритет не указан, они принимают приоритет по умолчанию 10, и они будут упорядочены в очереди по объявлению.
Таким образом, вы можете иметь много перехваченных функций на одном хуке, как, например, вФайл шаблона Woocommerce content-single-product.php
Иллюстрированный пример:
В приведенном ниже примере кода с комментариями вы можете видеть порядок выполнения в очереди перехвата для каждого перехваченногофункция для ловушки действий woocommerce_thankyou
:
// No defined priority (default priority is 10)
add_action( 'woocommerce_thankyou', 'first_custom_function_no_priority' );
function first_custom_function_no_priority( $order_id ) {
// ==> Triggered in third position ==> [3]
}
## Default Hook "woocommerce_order_details_table" (default priority is 10)
// ==> Triggered in second position ==> [2]
// Defined priority is 10
add_action( 'woocommerce_thankyou', 'order_created_get_skus', 10 );
function order_created_get_skus( $order_id ) {
// ==> Triggered in Fourth position ==> [4]
}
// Defined priority is 5
add_action( 'woocommerce_thankyou', 'third_custom_function', 5 );
function third_custom_function( $order_id ) {
// ==> Triggered in first position ==> [1]
}
// Defined priority is 20
add_action( 'woocommerce_thankyou', 'fourth_custom_function', 20 );
function fourth_custom_function( $order_id ) {
// ==> Triggered at last (sixth) ==> [6]
}
// No defined priority (default priority is 10)
add_action( 'woocommerce_thankyou', 'last_custom_function_no_priority' );
function last_custom_function_no_priority( $order_id ) {
// ==> Triggered in fifth position ==> [5]
}
Нижний приоритет выполняется (или срабатывает) раньше, более высокий приоритет выполняется (или срабатывает)) после.Если приоритет не указан, приоритет по умолчанию равен 10.
Подключенные функции можно удалить только с помощью remove_action()
или remove_filter()
с обязательным определенным приоритетом.
Чтобы увидеть, сколько перехваченных функций подключено к определенному перехватчику со всеми необходимыми деталями, вы можетеиспользуйте следующее, что даст вам необработанный вывод:
<code>global $wp_filter;
// HERE below you define the targeted hook name
$hook_name = 'woocommerce_widget_shopping_cart_buttons';
if( isset($wp_filter[$hook_name]) ) {
echo '<pre>';
print_r($wp_filter[$hook_name]);
echo '
';} else {echo '
Hook "'. $ hook_name. '" еще не используется!
';}
Существует 2 вида зацепок, как вы заметили, которые являются зацепками фильтра и зацепками действия.
зацепка действия:
- Точка выполнения хуков действия (триггер) : с
do_action()
- Присоединение функции к хуку действий (сработало) : с
add_action()
: функция выполняется и может иметь необязательные аргументы.
Крючок фильтра:
- Точка выполнения крючка фильтра (триггер) : с
apply_filters()
- Присоединение функции к крюку фильтра (фильтрация / срабатывание) : с
add_filter()
: обязательный аргумент (переменная) фильтруется и возвращается из "подключенной" функции
Хуки и их функции могут быть расположены в любом месте, как в файле function.php вашего компьютера.дочерняя тема tive (или активная тема) , а также в любых плагинах php-файлов.
Похожие: