You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:WooCommerce产品循环中两类添加购物车函数的调用位置

寻找WooCommerce产品循环中两个函数的调用位置

我正在查找WooCommerce产品循环中以下两个函数的调用位置:

function woocommerce_simple_add_to_cart()
function woocommerce_variable_add_to_cart()

这两个函数分别加载single-product/add-to-cart/simple.php模板与single-product/add-to-cart/variable.php模板。

我曾推测content-product.php模板会调用这些函数,但该模板仅包含:

do_action( 'woocommerce_after_shop_loop_item_title' );

以及

do_action( 'woocommerce_after_shop_loop_item' );

由此可知,产品循环项的模板必然是在WooCommerce的其他位置生成的。


函数调用逻辑解析

这两个函数并非直接在模板中调用,而是通过动作钩子挂载到产品循环流程中,具体链路如下:

  1. 钩子挂载入口
    在WooCommerce核心文件includes/wc-template-hooks.php中,通过统一的入口函数挂载到woocommerce_after_shop_loop_item钩子:
add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
  1. 统一调度函数
    woocommerce_template_loop_add_to_cart()位于includes/wc-template-functions.php,它负责加载循环添加购物车的通用模板:
function woocommerce_template_loop_add_to_cart() {
    global $product;

    wc_get_template( 'loop/add-to-cart.php', array(
        'product' => $product,
    ) );
}
  1. 按产品类型分发调用
    在loop/add-to-cart.php模板文件中,会根据当前产品的类型,动态调用对应函数:
switch ( $product->get_type() ) {
    case 'simple':
        woocommerce_simple_add_to_cart();
        break;
    case 'variable':
        woocommerce_variable_add_to_cart();
        break;
    // 其他产品类型(如分组、订阅等)的处理逻辑
}

整体调用链条:
content-product.php触发do_action('woocommerce_after_shop_loop_item') → 执行woocommerce_template_loop_add_to_cart() → 加载loop/add-to-cart.php → 根据产品类型调用目标函数

内容的提问来源于stack exchange,提问作者Rip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:15:00