请解释这些钩子如何工作


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_processwoocommerce_before_checkout_process在文件中的任何地方!他们在做什么?

Answers:


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()
戴夫·罗姆西
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.