Veuillez expliquer comment ces crochets fonctionnent

8

J'ai lu sur les crochets et les actions et je sais que lorsque nous voyons do_action('some_hook')cela signifie que quelque part add_action('some_hook', function() {...});ou une fonction some_hook()existe dans un thème functions.php.

Mais qu'est-ce que c'est?! :

Depuis woocommerce / includes / class-wc-checkout.php ligne # 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' ); <-----!!!

Je ne trouve pas woocommerce_checkout_processet woocommerce_before_checkout_processn'importe où dans les fichiers! Que font-ils?

Zhi V
la source

Réponses:

16

Il est possible que des crochets d'action soient fournis sans être utilisés, ce qui se passe ici.

woocommerce_before_checkout_processet woocommerce_checkout_processsont des hooks fournis par WooCommerce, mais WooCommerce n'associe pas lui-même de fonctions de rappel à l'un de ces hooks. Ils sont fournis pour permettre aux plugins et aux thèmes d'exécuter du code au moment où les hooks respectifs sont déclenchés.

Si vous souhaitez attacher une fonction au woocommerce_checkout_processcrochet (par exemple), vous devez ajouter le code suivant à votre thème ou plugin:

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

Ce code s'exécutera lorsque la ligne appelant do_action( 'woocommerce_checkout_process' );dans WooCommerce sera exécutée.

Dave Romsey
la source
J'ai ajouté un exemple de comment attacher une fonction de rappel. Vous n'appelez pas do_actionvotre code (sauf si vous définissez votre propre hook ce qui n'est pas le cas ici). Vous utiliseriez add_action().
Dave Romsey