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

woocommerce_add_cart_item_data钩子判断可变产品加购报错求助

WooCommerce可变产品加购联动报错修复

你的代码存在3个直接导致报错/逻辑失效的问题:

  • 参数声明不匹配:回调函数定义了接收$cart_item_data、$product_id、$variation_id3个参数,但add_action最后声明的接收参数数量是2,导致$variation_id变量没有有效值,用它做判断必然出错。
  • 可变产品ID逻辑错误:加购可变产品变体时,$product_id始终是可变主产品ID(即你场景下的18651),具体选中的变体ID(18652/18653)才会存在$variation_id参数里,你之前写的$product_id == 18653永远不会成立。
  • 钩子选择错误造成递归:woocommerce_add_cart_item_data是在加购流程执行过程中触发的钩子,你在这个钩子的回调里再次调用add_to_cart()方法,会重复触发同一个钩子,造成无限递归,直接抛出PHP致命错误。

修正后可直接使用的代码

选择在加购动作完成后触发的woocommerce_add_to_cart钩子实现逻辑,从根源避免递归问题,同时正确匹配参数个数:

add_action( 'woocommerce_add_to_cart', function( $cart_item_key, $product_id, $variation_id ) {
    // 匹配ID为18653的产品变体
    if ( 18653 === $variation_id ) {
        // 提前判断ID为15的商品是否已在购物车,避免重复加购,不需要可删除这段判断
        $target_product_id = 15;
        if ( ! WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $target_product_id ) ) ) {
            WC()->cart->add_to_cart( $target_product_id );
        }
    }
}, 10, 3 );

提示:如果需要每次加购18653变体时都额外加购1件15号商品,不需要去重,直接删掉代码里的购物车商品存在判断逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:03:32