如何对WooCommerce折扣后商品小计取整并计算购物车总计?
解决方案:WooCommerce 商品小计取整后累加计算购物车总计
要实现「先对折扣后的商品小计取整,再累加计算购物车总计」的需求,可以通过woocommerce_calculate_totals钩子直接修改购物车商品项的实际计算值,而非仅调整显示内容。以下是具体实现代码:
add_action('woocommerce_calculate_totals', 'custom_round_item_totals_before_calculate', 20); function custom_round_item_totals_before_calculate($cart) { // 避免后台或AJAX重复计算冲突 if (is_admin() && !defined('DOING_AJAX')) return; // 遍历购物车所有商品项 foreach ($cart->get_cart() as $cart_item_key => $cart_item) { // 获取折扣后的商品小计(已扣除商品级折扣) $item_total = $cart_item['line_total']; // 对小计执行取整操作(可根据需求替换为floor()向下取整或ceil()向上取整) $rounded_total = round($item_total); // 更新商品项的实际计算值,此修改会直接影响后续购物车总计的累加 $cart_item['line_total'] = $rounded_total; // 可选:同步调整商品项税额(若店铺需要计算税额,取消注释以下代码) // $item_tax = $cart_item['line_tax']; // $rounded_tax = round($item_tax); // $cart_item['line_tax'] = $rounded_tax; } }
关键说明:
- 钩子优先级:设置为20,确保在WooCommerce默认计算逻辑之后执行,覆盖原始计算值
- 取整逻辑:示例使用
round()做四舍五入,可根据业务需求替换为其他取整函数 - 应用位置:将代码添加到当前主题的
functions.php文件,或自定义功能插件中
验证步骤:
- 添加商品到购物车并应用折扣
- 查看购物车页面的商品小计(此时显示值与实际计算值一致)
- 确认购物车总计为所有取整后商品小计的累加结果
内容的提问来源于stack exchange,提问作者Kelvin Winter
相关产品推荐
相关产品推荐

