添加更新或删除 WooCommerce 发货订单项目

Suz*_*tha 3 php wordpress orders woocommerce

我已经添加了从亚马逊同步的订单的运费。由于某种原因,我必须在为亚马逊订单创建的 woo 订单中设置自定义运输统一价格。其操作如下:

    $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()
Run Code Online (Sandbox Code Playgroud)

问题是,每次亚马逊状态更改时我都必须更新订单,这样做没有问题,问题是如果更新的话我也必须更新运费。但无论如何我还没有找到这样做。谁能告诉我如何更新以此方式设置的订单的发货项目?或者事实上,一旦设置了运输项目,我们就无法更新或删除它?

Loi*_*tec 6

要添加或更新运输项目,请使用以下命令:

\n
$order_id = 2343;\n$order    = wc_get_order($order_id);\n$cost     = 10;\n$items    = (array) $order->get_items(\'shipping\');\n$country  = $order->get_shipping_country();\n\n// Set the array for tax calculations\n$calculate_tax_for = array(\n    \'country\' => $country_code,\n    \'state\' => \'\', // Can be set (optional)\n    \'postcode\' => \'\', // Can be set (optional)\n    \'city\' => \'\', // Can be set (optional)\n);\n\nif ( sizeof( $items ) == 0 ) {\n    $item  = new WC_Order_Item_Shipping();\n    $items = array($item);\n    $new_item = true;\n}\n   \n// Loop through shipping items\nforeach ( $items as $item ) {\n    $item->set_method_title( __("Amazon shipping rate") );\n    $item->set_method_id( "amazon_flat_rate:17" ); // set an existing Shipping method rate ID\n    $item->set_total( $cost ); // (optional)\n\n    $item->calculate_taxes( $calculate_tax_for ); // Calculate taxes\n\n    if( isset($new_item) && $new_item ) {\n        $order->add_item( $item );\n    } else {\n        $item->save()\n    }\n}\n$order->calculate_totals(); // Recalculate totals and save\n
Run Code Online (Sandbox Code Playgroud)\n

它应该更好地工作\xe2\x80\xa6

\n
\n

要删除运输项目,请使用以下命令:

\n
$order_id = 2343;\n$order    = wc_get_order($order_id);\n$items    = (array) $order->get_items(\'shipping\');\n\nif ( sizeof( $items ) > 0 ) {\n    // Loop through shipping items\n    foreach ( $items as $item_id => $item ) {\n        $order->remove_item( $item_id );\n    }\n    $order->calculate_totals(); // Recalculate totals and save\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

相关:在 Woocommerce 3 中以编程方式将运费添加到订单

\n

  • @SuzAannshrestha所以在这种情况下不要使用`$item->calculate_taxes()`,所以删除它。相反,添加这两行:`$item->set_taxes(['total' => []]);`和`$item->set_total_tax(0);`,这将使运输物品的税金为零。 (2认同)