Por favor explique cómo funcionan estos ganchos

8

He leído sobre ganchos y acciones y sé que cuando lo vemos do_action('some_hook')significa que existe un lugar add_action('some_hook', function() {...});o función some_hook()en un tema functions.php.

¡¿Pero, qué es esto?! :

Desde woocommerce / includes / class-wc-checkout.php línea # 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' ); <-----!!!

No puedo encontrar woocommerce_checkout_processy woocommerce_before_checkout_processen cualquier lugar en los archivos! ¿Qué hacen?

Zhi V
fuente

Respuestas:

16

Es posible que se proporcionen ganchos de acción sin ser utilizados, que es lo que está sucediendo aquí.

woocommerce_before_checkout_processy woocommerce_checkout_processson enlaces proporcionados por WooCommerce, pero WooCommerce no adjunta funciones de devolución de llamada a ninguno de estos enlaces. Se proporcionan para permitir que los complementos y temas ejecuten código en el momento en que se activan los respectivos enlaces.

Si desea adjuntar una función al woocommerce_checkout_processgancho (por ejemplo), agregaría el siguiente código a su tema o complemento:

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

Este código se ejecutará cuando se ejecute la línea que llama do_action( 'woocommerce_checkout_process' );a WooCommerce.

Dave Romsey
fuente
Agregué un ejemplo de cómo adjuntar una función de devolución de llamada. No invocas do_actiontu código (a menos que estés definiendo tu propio enlace, que no es el caso aquí). Tendrá que utilizar add_action().
Dave Romsey