Hãy giải thích cách các móc này hoạt động


8

Tôi đã đọc về hook và hành động và tôi biết rằng khi chúng ta thấy do_action('some_hook')nó có nghĩa là một nơi nào đó add_action('some_hook', function() {...});hoặc chức năng some_hook()tồn tại trong một chủ đề functions.php.

Nhưng nó là gì?! :

Từ thương mại điện tử / bao gồm / class-wc-checkout.php dòng # 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' ); <-----!!!

Tôi không thể tìm thấy woocommerce_checkout_processwoocommerce_before_checkout_processbất cứ nơi nào trong các tập tin! Họ làm gì?

Câu trả lời:


15

Có thể cung cấp các móc hành động mà không được sử dụng, đó là những gì đang xảy ra ở đây.

woocommerce_before_checkout_processwoocommerce_checkout_processlà các hook được cung cấp bởi WooC Commerce, nhưng WooC Commerce không tự gắn các hàm gọi lại vào một trong các hook này. Chúng được cung cấp để cho phép các plugin và chủ đề chạy mã tại thời điểm các hook tương ứng được kích hoạt.

Nếu bạn muốn đính kèm một chức năng vào woocommerce_checkout_processhook (ví dụ), bạn sẽ thêm đoạn mã sau vào chủ đề hoặc plugin của mình:

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

Mã này sẽ chạy khi dòng gọi do_action( 'woocommerce_checkout_process' );trong WooC Commerce được thực thi.


Tôi đã thêm một ví dụ về cách đính kèm chức năng gọi lại. Bạn không gọi do_actionmã của mình (trừ khi bạn đang xác định hook của chính mình không phải là trường hợp ở đây). Bạn sẽ sử dụng add_action().
Dave Romsey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.