我有一款售价1000英镑(含税)的产品。然后我申请10%的优惠券代码,但金额是920。
应该是900英镑(如打折100英镑)。
我以编程方式应用代码,如下所示:
$order->apply_coupon(\'123\')
似乎折扣是在产品价格中应用的,不含税,但它应该包括税。
一般税率为25%,但所有产品的价格都是包括税在内的。
因此,如果你做1000-20%(税),它是:800,800的10%是80,因此折扣只有80,而实际上应该是100。
有人能帮我吗?如果我使用正常的签出流程应用优惠券,它工作得很好,但我正在尝试以编程方式应用优惠券。
SO网友:Ziggy Verstrepen
我最近也遇到了这个问题,并设法解决了它。
在我的例子中,我创建了订单,并通过编程添加了行项目和优惠券。完成此操作后,您将计算总计和税款。如果没有可申请的优惠券,我会使用:$order->calculate_totals( true )
当使用优惠券时,我没有使用calculate\\u totals方法,因为$order->apply_coupons
recalculates the totals and taxes automatically.
对基于百分比的优惠券执行此操作时,计算出错,总金额与我预期的金额不匹配。和您一样,当遵循正常的签出流程时,计算将是正确的。
因此,我所做的是在添加行项目之后和应用优惠券之前计算总数。这样可以确保在应用息票之前,税款和总额是正确的。
简化示例:
// Create a new order.
$order = new WC_Order();
$order->set_prices_include_tax( true );
$order_id = $order->save();
// Add line item for order.
$line_item = new WC_Order_Item_Product();
$line_item->set_order_id( $order_id );
$line_item->set_name( \'Test product\' );
$line_item->set_quantity( 1 );
$line_item->set_tax_class( \'tax-21\' );
$line_item->set_subtotal( 1000 / 1.21 ); // Calc price pre tax: 21% VAT in this case.
$line_item->set_total( 1000 / 1.21 );
$line_item_id = $line_item->save();
// The next line is what fixed the problem:
// Calculate totals and taxes before a coupon is applied to ensure taxes and totals for order are correct.
$order->calculate_totals( true );
// Apply coupon.
$order->apply_coupon( \'MY_COUPON_CODE\' );