Пожалуйста, объясните, как работают эти крючки


8

Я читал о хуках и действиях, и я знаю, что когда мы видим, do_action('some_hook')это означает, что где-то add_action('some_hook', function() {...});или функция some_hook()существует в теме functions.php.

Но что это? :

Из строки woocommerce / includes / class-wc-checkout.php # 943:

public function process_checkout() {
    try {
        /////////////
        do_action( 'woocommerce_before_checkout_process' ); <----!!!

        if ( WC()->cart->is_empty() ) {
            throw new Exception( sprintf( __( 'Sorry, your session has expired. <a href="%s" class="wc-backward">Return to shop</a>', 'woocommerce' ), esc_url( wc_get_page_permalink( 'shop' ) ) ) );
        }

        do_action( 'woocommerce_checkout_process' ); <-----!!!

Я не могу найти woocommerce_checkout_processи woocommerce_before_checkout_processнигде в файлах! Что они делают?

Ответы:


16

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

woocommerce_before_checkout_processи woocommerce_checkout_processявляются перехватчиками, предоставляемыми WooCommerce, но сам WooCommerce не присоединяет функции обратного вызова ни к одной из этих перехватов. Они предоставлены для того, чтобы позволить плагинам и темам запускать код во время срабатывания соответствующих ловушек.

Если вы хотите прикрепить функцию к woocommerce_checkout_processхуку (например), добавьте следующий код в вашу тему или плагин:

add_action( 'woocommerce_checkout_process', 'wpse_woocommerce_checkout_process' );
function wpse_woocommerce_checkout_process() {
    // Do something...
}

Этот код будет выполняться при выполнении вызова линии do_action( 'woocommerce_checkout_process' );в WooCommerce.


Я добавил пример того, как прикрепить функцию обратного вызова. Вы не вызываете do_actionсвой код (если только вы не определяете свой собственный хук, которого здесь нет). Вы бы использовали add_action().
Дэйв Ромси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.