11/5/21 更新
发现wc_order
无法访问calculate_totals 和calculate_taxes 真的很棘手。我发现解决方案是在计算之前放置$order = wc_get_order( $order->get_id() );
。 2个$order类型不同,一个是(object)WC_Order
,另一个是(Object)Automattic\WooCommerce\Admin\Overrides\Order
。第二个对象的方法有效。
我想让 AJAX 函数以编程方式下订单。产品价格基于元数据,因此我必须计算每个订单项。客户端发送请求放置的帖子没有任何问题。问题点,即使我将价格设置为订单项,并使用 calculate_totals
作为 WC_Order
但价格不正确。唯一的修正是成本和小计。虽然我点击了重新计算按钮,但价格还是合适的。
代码
function place_an_order($data){
$screen_prodcut = new WC_Product_Simple(6310);
$userid = get_current_user_id();
$order = wc_create_order(array('customer_id'=>$userid));
$screen_quantity = 2;
$item_id = $order->add_product($screen_prodcut,$screen_quantity);
wc_add_order_item_meta($item_id,'width','1201');
wc_add_order_item_meta($item_id,'height','1201');
wc_add_order_item_meta($item_id,'note','** this is testing**');
$screen_price = 50;
$new_line_screen_price = $screen_price * $screen_quantity;
$item = $order->get_item($item_id);
$item->set_subtotal( $new_line_screen_price / 11 * 10 );
$item->set_total( $new_line_screen_price / 11 * 10 );
$item->save();
// ###section 1###
$order->calculate_taxes();
$order->calculate_totals();
// ###section 2###
}
在 section 1
中运行时,$item
小计和总计是正确的。但是在 section 2
中运行时打印 $order
和检索总数是错误的。在仪表板中,价格会显示错误,但总计和小计是正确的。
点击 recalculate
后,订单总数被更正。
我不知道为什么 calculate_totals
和 calculate_taxes
不起作用。 woocommerce_calc_line_taxes 是通过点击重新计算按钮的 AJAX 操作。用法也是calculate_totals 和税。或者,我必须使用 set_total
而不是 calculate_totals
?