WooCommerce变体商品加入购物车时添加20美元附加费问题
解决WooCommerce添加购物车时变体商品附加费失效及eval()错误问题
你的代码第6行报错的核心原因是:处理简单商品时,$variation_id的值为0,调用wc_get_product(0)会返回false,再去调用get_price()自然会触发错误。另外原逻辑通过对比主商品和变体商品价格来选择价格的方式也不合理,完全可以直接根据商品类型获取对应价格。
下面是修正后的代码:
add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 10, 3 ); function add_cart_item_data( $cart_item_data, $product_id, $variation_id ) { // 根据是否有变体ID获取对应的商品对象 if ( $variation_id > 0 ) { $product = wc_get_product( $variation_id ); } else { $product = wc_get_product( $product_id ); } // 确保商品对象有效再获取价格 if ( ! $product ) { return $cart_item_data; } $price = $product->get_price(); // 当自定义字段有值时,添加20美元附加费 if( ! empty( $_POST['custom_text_add_on'] ) ) { $cart_item_data['new_price'] = floatval($price) + 20; } return $cart_item_data; }
关键改动说明:
- 新增
$variation_id > 0的判断,避免给无效ID创建商品对象,从根源解决第6行的错误 - 简化价格获取逻辑,直接根据商品类型(变体/简单)获取对应价格,不需要多余的价格对比
- 增加商品对象有效性检查,防止极端情况下调用
get_price()出错 - 用
floatval()转换价格为浮点型,避免字符串相加导致的异常
内容的提问来源于stack exchange,提问作者PatInParis
相关产品推荐
相关产品推荐

