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
相关产品推荐
相关产品推荐

