在Woocommerce 3中更改订单商品价格

时间:2018-05-03 20:42:17

标签: php wordpress woocommerce orders price

我需要在woocommerce订单中更改商品价格,但我发现的一切都是改变购物车中的价格,但这不是我需要的,因为我需要在结帐过程后更改。

有人能给我一个如何做到这一点的线索吗?

2 个答案:

答案 0 :(得分:1)

您需要使用Woocommerce 3中引入的新CRUD setters methods

这是一个具有静态价格和静态订单ID的工作基本示例:

$order_id = 809; // Static order Id (can be removed to get a dynamic order ID from $order_id variable)

$order = wc_get_order( $order_id ); // The WC_Order object instance

// Loop through Order items ("line_item" type)
foreach( $order->get_items() as $item_id => $item ){
    $new_product_price = 50; // A static replacement product price
    $product_quantity = (int) $item->get_quantity(); // product Quantity

    // The new line item price
    $new_line_item_price = $new_product_price * $product_quantity;

    // Set the new price
    $item->set_subtotal( $new_line_item_price ); 
    $item->set_total( $new_line_item_price );

    // Make new taxes calculations
    $item->calculate_taxes();

    $item->save(); // Save line item data
}
// Make the calculations  for the order
$order->calculate_totals();

$order->save(); // Save and sync the data

然后,您必须在自定义页面中使用提交的新价格替换静态价格,这不是那么简单,因为您需要定位正确的$item_id ...

答案 1 :(得分:0)

非常感谢,我花了4个小时寻找如何更改订单中的产品数量并根据您的代码(我重新编写了必要的部分)我终于明白了!那是如果有人需要更改订单中的产品数量`

$order = wc_get_order( $_POST['orderID'] );

foreach( $order->get_items() as $item_id => $item ){
    $product = $item->get_product();
    $product_price = (int) $product->get_price(); // A static replacement product price
    $new_quantity = (int) $_POST['productQty'] // product Quantity
    
    // The new line item price
    $new_line_item_price = $product_price * $new_quantity;
    
    // Set the new price
    $item->set_quantity($_POST['orderQty']);
    $item->set_subtotal( $new_line_item_price ); 
    $item->set_total( $new_line_item_price );

    // Make new taxes calculations
    $item->calculate_taxes();

    $item->save(); // Save line item data
}
// Make the calculations  for the order and SAVE
$order->calculate_totals();`