WooCommerce:如何在结账时将价格四舍五入到两位小数
WooCommerce 强制购物车/结账环节按两位小数计算价格
WooCommerce默认采用四位小数进行后台价格计算,即便前台显示两位小数,多件商品累加后导入会计软件时仍会出现0.01的金额差异。以下代码可直接添加到主题的functions.php文件(推荐用子主题,避免主题更新丢失代码),强制购物车、结账及订单生成环节的价格计算均四舍五入到两位小数:
// 强制购物车商品价格四舍五入到两位小数 add_filter( 'woocommerce_get_price', 'round_product_price_to_two_decimals', 10, 2 ); function round_product_price_to_two_decimals( $price, $product ) { return round( $price, 2 ); } // 强制购物车项小计四舍五入到两位小数 add_filter( 'woocommerce_cart_item_subtotal', 'round_cart_item_subtotal', 10, 3 ); function round_cart_item_subtotal( $subtotal, $cart_item, $cart_item_key ) { $price = round( $cart_item['data']->get_price(), 2 ); $subtotal = $price * $cart_item['quantity']; return wc_price( round( $subtotal, 2 ) ); } // 强制购物车总计四舍五入到两位小数 add_filter( 'woocommerce_calculated_total', 'round_cart_total_to_two_decimals', 10, 2 ); function round_cart_total_to_two_decimals( $total, $cart ) { return round( $total, 2 ); } // 强制订单行项目金额四舍五入到两位小数 add_action( 'woocommerce_checkout_create_order_line_item', 'round_order_line_item_amount', 10, 4 ); function round_order_line_item_amount( $item, $cart_item_key, $values, $order ) { $item->set_subtotal( round( $item->get_subtotal(), 2 ) ); $item->set_total( round( $item->get_total(), 2 ) ); }
代码说明
woocommerce_get_price:修改单个商品的基础价格为两位小数woocommerce_cart_item_subtotal:重新计算购物车中每个商品项的小计,确保是两位小数的价格乘以数量后再四舍五入woocommerce_calculated_total:对购物车的最终总计进行两位小数的四舍五入woocommerce_checkout_create_order_line_item:在生成订单时,强制行项目的金额为两位小数,避免订单导出时出现差异
注意事项
- 操作前务必备份
functions.php文件,避免代码错误导致网站故障 - 优先使用子主题的
functions.php,主题更新不会覆盖自定义代码 - 测试多种场景:多件商品购买、使用优惠券、添加税费等,确保金额计算准确且无差异
内容的提问来源于stack exchange,提问作者Lupani
相关产品推荐
相关产品推荐

