我有一种价值1000英镑的产品(含税)。然后我用10%的优惠券代码,但金额是920。
应该是900英镑。( 100折扣)。
我正在编程地应用代码,如下所示:
$order->apply_coupon('123')似乎折扣是适用于产品价格不征税,但它应该适用,包括税收。
一般税是25%,但是所有的产品价格都是确定的,包括税。
所以,如果你做1000 %- 20% (税收) it : 800,10%的800是80,那么折扣率只有80,而实际上它应该是100。
有人能帮我一下吗?如果我使用正常的签出流程应用优惠券,它可以正常工作,但我正在尝试以编程方式应用优惠券。
发布于 2021-11-05 10:36:29
我最近也遇到了这个问题,并设法解决了它。
在我的例子中,我创建了订单,并通过编程添加了行项和优惠券。当这件事完成后,你就算出总数和税金。如果没有可应用的优惠券,我将使用:$order->calculate_totals( true ),当应用优惠券时,我不会使用calculate_totals方法,因为$order->apply_coupons 自动重新计算总额和税金。。
对基于百分比的优惠券这样做,计算出错,总金额不符合我的预期数额。和您一样,在遵循正常的签出流程时,计算将是正确的。
因此,我所做的就是在添加行项目之后和在优惠券应用之前计算总计。这确保了在使用优惠券之前税收和总额是正确的。
简化示例:
// 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' );https://wordpress.stackexchange.com/questions/365386
复制相似问题