我一直在尝试多种解决方案,以编程方式通过Woocommerce设置运输价格(每订单)。我没有运气
我尝试覆盖该项目的元值:
update_post_meta( $woo_order_id, '_order_shipping', $new_ship_price );
也尝试了一些与此[问题/答案] [1]相似的方法
$item_ship = new WC_Order_Item_Shipping();
$item_ship->set_name( "flat_rate" );
$item_ship->set_amount( $new_ship_price );
$item_ship->set_tax_class( '' );
$item_ship->set_tax_status( 'none' );
// Add Shipping item to the order
$order->add_item( $item_ship );
但是似乎都不起作用。 任何指针最欢迎。
类似的线程:Add a fee to an order programmatically in Woocommerce 3
答案 0 :(得分:4)
要在Woocommerce 3+中处理此问题,请使用以下命令(来自WC_Order
订单对象$order
):
## ------------- ADD SHIPPING PROCESS ---------------- ##
// Get the customer country code
$country_code = $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)
);
// Optionally, set a total shipping amount
$new_ship_price = 5.10;
// Get a new instance of the WC_Order_Item_Shipping Object
$item = new WC_Order_Item_Shipping();
$item->set_method_title( "Flat rate" );
$item->set_method_id( "flat_rate:14" ); // set an existing Shipping method rate ID
$item->set_total( $new_ship_price ); // (optional)
$item->calculate_taxes($calculate_tax_for);
$order->add_item( $item );
$order->calculate_totals();
$order->update_status('on-hold');
// $order->save(); // If you don't update the order status
测试过作品。