woocommerce 以编程方式重新计算价格

时间:2021-05-10 02:42:07

标签: wordpress woocommerce

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 和检索总数是错误的。在仪表板中,价格会显示错误,但总计和小计是正确的。

enter image description here

点击 recalculate 后,订单总数被更正。

enter image description here

我不知道为什么 calculate_totalscalculate_taxes 不起作用。 woocommerce_calc_line_taxes 是通过点击重新计算按钮的 AJAX 操作。用法也是calculate_totals 和税。或者,我必须使用 set_total 而不是 calculate_totals?

0 个答案:

没有答案