Хуки и очереди их перехваченных функций в Wordpress и Woocommerce - PullRequest
0 голосов
/ 11 октября 2018

Я новичок в Wordpress / WooCommerce и PHP, хотя у меня есть опыт работы с другими веб-платформами и языками.Я искал, но не нашел ответа на свой вопрос, который ...

Являются ли хуки, созданные "add_action", "добавленными" в список действий, вызываемых этим конкретным хуком, или делаютони переопределяют любые существующие хуки этого действия?

Например, если я добавлю хук woocommerce_thankyou, используя:

add_action( 'woocommerce_thankyou', 'order_created_get_skus',#);

Вопрос: Это переопределяет какие-либо другиеперехватывает woocommerce_thankyou или он вызывается в дополнение к любым другим перехватчикам, установленным для woocommerce_thankyou?

1 Ответ

0 голосов
/ 11 октября 2018

Перехваченные функции никогда не будут переопределять другие перехваченные функции, которые используют то же действие или зацепку фильтра .

Они добавляются в своего рода "очередь перехвата" с порядком выполнения, основанным на правилах приоритета:

  • Если указан приоритет, они будут упорядочены в очереди сначала по приоритету перехвата и по приоритету объявления.
  • Еслиприоритет не указан, они принимают приоритет по умолчанию 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 вида зацепок, как вы заметили, которые являются зацепками фильтра и зацепками действия.

  1. зацепка действия:

    • Точка выполнения хуков действия (триггер) : с do_action()
    • Присоединение функции к хуку действий (сработало) : с add_action(): функция выполняется и может иметь необязательные аргументы.
  2. Крючок фильтра:

    • Точка выполнения крючка фильтра (триггер) : с apply_filters()
    • Присоединение функции к крюку фильтра (фильтрация / срабатывание) : с add_filter(): обязательный аргумент (переменная) фильтруется и возвращается из "подключенной" функции

Хуки и их функции могут быть расположены в любом месте, как в файле function.php вашего компьютера.дочерняя тема tive (или активная тема) , а также в любых плагинах php-файлов.


Похожие:

...