Add update or remove WooCommerce shipping order items Add update or remove WooCommerce shipping order items wordpress wordpress

Add update or remove WooCommerce shipping order items


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 itemsforeach ( $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


The WC_Order_Item_Shipping object can be added to an order using either of 2 methods.

  1. WC_ORDER->add_shipping( WC_Order_Item_Shipping ) This is deprecated in 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();

References: woocommerce.github.io.../#add_shipping woocommerce.github.io.../#add_item