Хуки и очереди выполнения их перехваченных функций в WordPress и Woocommerce

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

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

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

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

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

1

Решение

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

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

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

Чтобы увидеть, сколько перехваченных функций подключено к конкретному перехватчику со всеми необходимыми деталями, вы можете использовать следующее, что даст вам необработанный вывод:

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 '</pre>';
} else {
echo '<p>Hook "'.$hook_name.'" is not used yet!</p>';
}

Как вы заметили, существует 2 вида хуков, которые являются фильтрационными хуками и хуками действий.

  1. Действие Хук:

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

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

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


Связанные с:

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]