Я новичок в WordPress / WooCommerce и PHP, хотя у меня есть опыт работы с другими веб-платформами и языками. Я искал, но не нашел ответ на мой вопрос, который …
Хуки, созданные «add_action», «добавлены» в список действий, вызываемых этим конкретным хуком, или они перекрывают любые существующие хуки этого действия?
Например, если я добавлю woocommerce_thankyou
с помощью крючка:
add_action( 'woocommerce_thankyou', 'order_created_get_skus',#);
Вопрос: Отменяет ли это какие-либо другие хуки для woocommerce_thankyou
или он вызывается в дополнение к любым другим хукам, установленным для woocommerce_thankyou
?
Крюковые функции никогда не переопределит другие перехваченные функции, которые используют то же действие или перехват фильтра.
Они добавлены в своего рода «очередь крюка» с порядком исполнения, основанным на правилах приоритета:
- Если указан приоритет, они будут упорядочены в очереди сначала по приоритету перехвата и по приоритету объявления.
- Если приоритет не указан, они принимают приоритет по умолчанию 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 вида хуков, которые являются фильтрационными хуками и хуками действий.
Действие Хук:
do_action()
add_action()
: функция выполняется и может иметь необязательные аргументы.Крючок фильтра:
apply_filters()
add_filter()
: обязательный аргумент (Переменная) фильтруется и возвращается из «подключенной» функцииХуки и их функции могут быть расположены в любом месте, как в файле function.php ваша активная детская тема (или активная тема) а также в любом плагины php файлы
Связанные с:
Других решений пока нет …