我正在尝试使用钩子
'woocommerce_checkout_create_order_line_item'
提交订单后修改订单行子/总计。我可以更改这些值,它们会在订单电子邮件中正确显示,但订单总数不会更新。
add_action('woocommerce_checkout_create_order_line_item', 'css_modify_order', 10, 4);
function css_modify_order($item, $cart_item_key, $values, $order) {
$item->set_subtotal(50);
$item->set_total(50);
}
我认为,由于这是在将订单项添加到订单之前对其进行修改,因此在保存订单之前,WooCommerce 将在其代码执行中进一步获得正确的总金额。
我尝试过使用
$item->save();
和$item->apply_changes()
,但订单总数没有变化。 $order->save_items()
会引发错误,而 $order->save()
则没有效果。
我一定是错过了什么。如何修改订单项目并正确显示订单总额?
由于 WooCommerce 总计是在根据购物车商品提交订单时预先计算的,因此如果您像实际所做的那样对这些商品进行更改,则需要告诉 WooCommerce 重新计算总计。
为此,您应该在创建订单后使用
WC_Abstract_Order
calculate_totals()
方法,并带有 woocommerce_checkout_order_created
钩子:
add_action('woocommerce_checkout_order_created', function($order){
$order->calculate_totals();
});
代码位于子主题的functions.php文件中(或插件中)。