覆盖 WooCommerce 中的挂钩函数

Overriding a hooked in function in WooCommerce

覆盖 WordPress 挂钩的函数的过程是什么?

wc-template-functions.php 中的以下函数是我要覆盖的函数之一:

function woocommerce_template_loop_product_link_close() {
    echo '</a>';
}

它挂在 wc-template-hooks.php:

add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );

如果我写了下面的代码,函数就unhooked:

function remove_default_wc_behaviour() {
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
}

add_action( 'init', 'remove_default_wc_behaviour' );

但是如果我想重写该函数怎么办,即。实现我自己的功能而不是 WooCommerce 的默认功能?

我会先调用 remove_action(),然后使用 add_action() 挂接我的函数,还是有一个程序可以简单地覆盖挂接在我的 WooCommerce 中的函数?

提前致谢

第一个选项是正确的:在你的主函数挂钩在init动作挂钩中,你可以添加你的替换挂钩函数:

add_action( 'init', 'replace_default_wc_behaviour' );
function remove_default_wc_behaviour() {
    // remove the default behavior
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );

    // Replace by your custom behavior
    add_action( 'woocommerce_after_shop_loop_item', 'custom_WC_loop_product_link_close', 5 );
    function custom_WC_loop_product_link_close() {
        // Do your custumizations

        // add the close tag
        echo '</a>';
    }
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。