在WooCommerce中获取不含费用、折扣及运费的订单总额
解决WooCommerce订单获取不含费用/折扣/运费总价的问题
咱们先理清问题根源:你添加了-15美元的负费用后,订单计算总价是10-15=-5,但WooCommerce会限制订单总价不能为负数,所以get_total()返回0是系统的正常逻辑。要拿到不含任何费用、折扣、运费的原始商品总价,你可以用下面几种方法:
方法1:获取完全不含任何折扣的商品原始总价
如果你需要的是商品常规价格×数量的总和(完全不考虑任何商品级或全局折扣),可以遍历订单的商品项计算:
// 假设你已经通过订单ID获取了有效的WC_Order对象 $order = wc_get_order( $your_order_id ); $original_goods_total = 0; foreach ( $order->get_items() as $item ) { // 获取商品的常规价格(未打折的原价) $regular_price = (float) $item->get_regular_price(); // 获取购买数量 $quantity = (int) $item->get_quantity(); // 累加计算总价 $original_goods_total += $regular_price * $quantity; } // 输出结果(示例中会返回10) echo $original_goods_total;
方法2:获取含商品级折扣但不含全局费用/运费的总价
如果你的需求是包含商品自身的折扣(比如单个商品的降价),但排除全局费用、运费和全局折扣,可以累加每个订单项的实际小计:
$order = wc_get_order( $your_order_id ); $subtotal_with_item_discounts = 0; foreach ( $order->get_items() as $item ) { // 每个商品项的实际小计(数量×实际购买价,已包含商品级折扣) $subtotal_with_item_discounts += (float) $item->get_total(); } echo $subtotal_with_item_discounts;
方法3:直接使用内置方法获取商品小计
WooCommerce的WC_Order类提供了get_subtotal()方法,它返回的就是商品的小计(包含商品级折扣,排除运费、全局费用和全局折扣),用法非常简单:
$order = wc_get_order( $your_order_id ); $order_subtotal = $order->get_subtotal(); echo $order_subtotal;
根据你的实际需求选择对应的方法就可以啦!
内容的提问来源于stack exchange,提问作者mahdi azarm
相关产品推荐
相关产品推荐

