web-dev-qa-db-ja.com

これらのフックがどのように機能するのか説明してください

私はフックとアクションについて読みましたが、do_action('some_hook')を見たときそれはテーマのfunctions.phpのどこかにadd_action('some_hook', function() {...});またはsome_hook()が存在することを意味します。

しかし、それはなんですか。 :

woocommerce/includes/class-wc-checkout.php line#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がありません。彼らは何をしますか?

7
Zhi V

アクションフックが使われずに提供されることは可能です、それはここで起こっていることです。

woocommerce_before_checkout_processwoocommerce_checkout_processはWooCommerceによって提供されるフックですが、WooCommerceそれ自体はこれらのフックのどちらにもコールバック関数を付けません。それぞれのフックがトリガーされたときにプラグインとテーマがコードを実行できるようにするために提供されています。

woocommerce_checkout_processフックに関数を添付したい場合は、あなたのテーマやプラグインに次のコードを追加します。

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

このコードは、WooCommerceのdo_action( 'woocommerce_checkout_process' );を呼び出す行が実行されたときに実行されます。

14
Dave Romsey