如何在Woocommerce中为同商品的不同购买数量设置单独定价
WooCommerce 购物车同商品首件原价、超量优惠定价实现方案
不要修改class-wc-cart.php核心文件,避免WooCommerce版本更新覆盖自定义逻辑,直接使用官方钩子即可覆盖加购、购物车修改数量全场景的定价需求,实现逻辑如下:
实现原理
利用WooCommerce计算购物车总额前触发的woocommerce_before_calculate_totals钩子,动态调整商品定价:当商品数量≥2时,总金额按「首件原价 + (数量-1)*20美元」计算,再将平均单价传入商品对象即可适配原生结算逻辑。同时可新增购物车单价显示钩子,避免用户对定价产生误解。
可直接使用的代码段
将以下代码添加到当前活跃主题的functions.php文件末尾,或自定义功能插件中即可生效:
1. 动态计算购物车商品总价
add_action( 'woocommerce_before_calculate_totals', 'custom_first_item_discount_price', 99 ); function custom_first_item_discount_price( $cart ) { // 跳过后台非AJAX请求 if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // 避免重复执行 if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return; foreach ( $cart->get_cart() as $cart_item ) { $product = $cart_item['data']; $quantity = $cart_item['quantity']; $regular_price = $product->get_regular_price(); $extra_unit_price = 20; if ( $quantity < 2 ) { // 数量不足2件按原价结算 $product->set_price( $regular_price ); } else { // 计算总金额后取平均单价传入商品对象 $total_amount = $regular_price + ( $quantity - 1 ) * $extra_unit_price; $average_price = $total_amount / $quantity; $product->set_price( $average_price ); } } }
2. 优化购物车单价显示(可选)
如果需要在购物车页面提示用户定价规则,添加以下代码:
add_filter( 'woocommerce_cart_item_price', 'custom_cart_item_price_tip', 99, 3 ); function custom_cart_item_price_tip( $price_html, $cart_item, $cart_item_key ) { $quantity = $cart_item['quantity']; if ( $quantity >= 2 ) { $regular_price = wc_price( $cart_item['data']->get_regular_price() ); $extra_price = wc_price(20); $price_html .= "<br><small>定价规则:首件{$regular_price},超出部分每件{$extra_price}</small>"; } return $price_html; }
自定义调整说明
- 若需针对不同商品设置不同的超量单价,可给商品新增自定义字段存储优惠单价,代码中读取对应字段值替换固定的
20即可 - 该逻辑自动适配用户加购同款商品、购物车修改数量两种场景,无需额外开发
内容的提问来源于stack exchange,提问作者Orela Studio
相关产品推荐
相关产品推荐

