简体   繁体   English

添加更新或删除 WooCommerce 运输订单项目

[英]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对象可以使用两种方法之一添加到订单中。

  1. WC_ORDER->add_shipping( WC_Order_Item_Shipping ) This is deprecated in WooCommerce V3. WC_ORDER->add_shipping( WC_Order_Item_Shipping )这在 WooCommerce V3 中已弃用。
  2. 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.

相关问题 在 WooCommerce 的新订单电子邮件中的项目下添加运输类别? - Add shipping class under items in New Order email in WooCommerce? 在 Woocommerce 中删除管理员添加订单的国家/地区计费和运输字段 - Remove country billing and shipping fields on admin add order in Woocommerce 在Woocommerce 3中以编程方式向订单添加送货 - Add a shipping to an order programmatically in Woocommerce 3 将运输和优惠券添加到使用 wc_create_order() 创建的 WooCommerce 订单 - Add Shipping & Coupons to WooCommerce Order created with wc_create_order() 从Woocommerce的新订单电子邮件中删除“运输小计” - Remove “shipping subtotal” from Woocommerce's new order emails 从 Woocommerce email 通知中的订单表中删除运输行 - Remove the shipping row from the order table in Woocommerce email notifications 删除特定运输类别的Woocommerce“下订单”按钮 - Remove Woocommerce “place order” button for a specific shipping class 从Woocommerce管理员编辑订单页面删除运输行 - Remove shipping row from Woocommerce admin edit order pages 如何从 Woocommerce 的结帐审查订单表中删除运输行? - How to remove shipping row from checkout review order table in Woocommerce? 更改购物车项目重量以更新 Woocommerce 中的运费 - Change cart items weight to update the shipping costs in Woocommerce
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM