[英]Add update or remove WooCommerce shipping order items
I have added shipping cost for the orders that are synced from amazon.我已经为从亚马逊同步的订单添加了运费。 For some reason I had to set custom shipping flat price in woo-orders created for amazon-order.
出于某种原因,我不得不在为亚马逊订单创建的 woo 订单中设置自定义运费统一价格。 It is done as follow:
它是按如下方式完成的:
$OrderOBJ = wc_get_order(2343);
$item = new WC_Order_Item_Shipping();
$new_ship_price = 10;
$shippingItem = $OrderOBJ->get_items('shipping');
$item->set_method_title( "Amazon shipping rate" );
$item->set_method_id( "amazon_flat_rate:17" );
$item->set_total( $new_ship_price );
$OrderOBJ->update_item( $item );
$OrderOBJ->calculate_totals();
$OrderOBJ->save()
The problem is, I have to update orders in each time the status is changed in amazon, there is no problem doing that, problem is I have to update the shipping cost also if it is updated.问题是,每次亚马逊状态更改时我都必须更新订单,这样做没有问题,问题是如果更新了运费,我也必须更新。 But I have not found anyway to do so.
但我还没有找到这样做。 Can anyone tell me how to update the shipping items of orders set in this way ?
谁能告诉我如何更新以这种方式设置的订单的运输项目? Or is it the fact that, once shipping item is set then we cannot update or delete it ?
或者是这样的事实,一旦设置了运输项目,我们就无法更新或删除它? Any kinds of suggestion are highly appreciated.
任何形式的建议都受到高度赞赏。 Thanks.
谢谢。
To add or update shipping items use the following:要添加或更新运输项目,请使用以下命令:
$order_id = 2343;
$order = wc_get_order($order_id);
$cost = 10;
$items = (array) $order->get_items('shipping');
$country = $order->get_shipping_country();
// Set the array for tax calculations
$calculate_tax_for = array(
'country' => $country_code,
'state' => '', // Can be set (optional)
'postcode' => '', // Can be set (optional)
'city' => '', // Can be set (optional)
);
if ( sizeof( $items ) == 0 ) {
$item = new WC_Order_Item_Shipping();
$items = array($item);
$new_item = true;
}
// Loop through shipping items
foreach ( $items as $item ) {
$item->set_method_title( __("Amazon shipping rate") );
$item->set_method_id( "amazon_flat_rate:17" ); // set an existing Shipping method rate ID
$item->set_total( $cost ); // (optional)
$item->calculate_taxes( $calculate_tax_for ); // Calculate taxes
if( isset($new_item) && $new_item ) {
$order->add_item( $item );
} else {
$item->save()
}
}
$order->calculate_totals();
It should better work…它应该更好地工作......
To remove shipping items use te following:要删除运输项目,请使用以下内容:
$order_id = 2343;
$order = wc_get_order($order_id);
$items = (array) $order->get_items('shipping');
if ( sizeof( $items ) > 0 ) {
// Loop through shipping items
foreach ( $items as $item_id => $item ) {
$order->remove_item( $item_id );
}
$order->calculate_totals();
}
Related: Add a shipping to an order programmatically in Woocommerce 3相关: 在 Woocommerce 3 中以编程方式向订单添加运费
The WC_Order_Item_Shipping
object can be added to an order using either of 2 methods. WC_Order_Item_Shipping
对象可以使用两种方法之一添加到订单中。
WC_ORDER->add_shipping( WC_Order_Item_Shipping )
This is deprecated in WooCommerce V3. WC_ORDER->add_shipping( WC_Order_Item_Shipping )
这在 WooCommerce V3 中已弃用。WC_ORDER->add_item( WC_Order_Item_Shipping )
If you need to persist this change on the database then use WC_ORDER->save();
如果您需要在数据库上保留此更改,请使用
WC_ORDER->save();
References: woocommerce.github.io.../#add_shipping woocommerce.github.io.../#add_item参考: woocommerce.github.io.../#add_shipping woocommerce.github.io.../#add_item
Just get order and delete item by id只需按 id 获取订单并删除项目
$ordr_id = 4414;
$item_id = 986;
$order = wc_get_order($ordr_id);
$order->remove_item($item_id);
$order->calculate_totals();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.