3

我需要在结帐页面上的 woocommerce 订单中或在 woocommerce 创建订单时更新订单项元数据。我正在使用插件可视化产品配置器,它没有将订单中某些项目的正确数量传递给 woocommerce 订单元,尤其是当我在同一产品上使用多个变体时。

是否有一个钩子可供我用来更新某个订单商品的商品数量,我该如何使用它?该插件返回给我一个包含所有购物车信息的数组,我只能检查订单中的某个商品是否多次出现 - 如果是,我需要将该商品的数量更改为 woocommerce 订单/数据库中的那个数字。

我正在考虑将以下钩子添加到我的functions.php

add_action('woocommerce_checkout_create_order', 'change_qty', 1,1);


function change_qty($item_qty){

  foreach($item_qty as $qty) {
    $qty['product_id'] = $id;
    $qty['qty'] = $new_qty
    $order->update_meta_data('quantity', $new_qty, $id)
  }
}

而 $item_qty 是一个包含 item_ids 和调整数量的多维数组。

我面临的另一个问题是我不知道何时需要调用该函数,因为我从结帐页面上的插件中获取了数组,但我认为 WooCommerce 那时还没有创建订单?

结果应该是后端 woocommerce 订单摘要中调整后的商品数量。

4

2 回答 2

1

要更新订单商品数量,您可以使用WC_Order_Item_Product set_quantity()method

更新订单项目(行项目)的正确挂钩是woocommerce_checkout_create_order_line_itemaction hook,它在订单创建期间触发,在数据保存到数据库之前。

add_action('woocommerce_checkout_create_order_line_item', 'change_order_line_item_quantity', 10, 4 );
function change_order_line_item_quantity( $item, $cart_item_key, $cart_item, $order ) {
    // Your code goes below

    // Get order item quantity
    $quantity = $item->get_quantity();

    $new_qty = $quantity + 2;

    // Update order item quantity
    $item->set_quantity( $new_qty );
}

函数参数(变量)已定义并可使用:

  • $itemWC_Order_Item_Product对象(尚未保存到数据库)
  • $cart_item_key是相关的购物车项目键
  • $cart_item是相关的购物车商品数据
  • $order是 WC_Order 对象(尚未保存到数据库)

有关的:

于 2019-04-10T14:28:32.403 回答
-2

这可以帮助您(我们连接到来自支付提供商的支付完成通知)。如果您想_qty在订单创建后更新,我可以更改我的功能。但现在我只会在付款成功时更新它。:

/**
 * Update order item qty after payment successful
 */
add_filter( 'woocommerce_payment_complete_order_status', 'update_order_item_qty', 10, 2 );
function update_order_item_qty( $order_status, $order_id ) {

    //Get the order and items
    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    //New qty
    $new_qty = 0;

    foreach ( $items as $item_id => $item_data ) {
        update_meta_data( '_qty', $new_qty, $item_id );
    }
}

如果这是您正在寻找的,请尝试。

于 2019-04-10T13:02:44.750 回答