【问题标题】:How to update WooCommerce order item quantity如何更新 WooCommerce 订单商品数量
【发布时间】:2019-08-31 21:32:59
【问题描述】:

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

是否有一个 hook 可供我用来更新某个订单商品的商品数量以及如何使用它? 该插件向我返回一个包含所有购物车信息的数组,我只能检查订单中的某个商品是否多次出现 - 如果是,我需要将该商品的数量更改为 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 订单摘要中调整后的商品数量。

【问题讨论】:

    标签: php woocommerce hook-woocommerce orders product-quantity


    【解决方案1】:

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

    更新订单项目(行项目)的正确挂钩是woocommerce_checkout_create_order_line_item action 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 对象(尚未保存到数据库)

    相关:

    【讨论】:

    • 谢谢,不过我不太了解函数 cahnge_order_line_item_quantity 中的所有变量,我必须在哪里声明它们,或者在我创建订单时它们已经声明了吗?
    • 函数参数(以下变量)如$item$cart_item_key$cart_item$order 已定义并可使用。
    • 好的,我刚刚测试了它,它可以工作。您是否有任何参考或文档可供我阅读有关这些变量的信息?我想检查 product_id 是否与函数中循环的那个相同?我 $item 指的是 SKU、ProductID 还是其他东西?
    • @erik7 我添加了一些链接和解释
    • 谢谢,我正在检查
    【解决方案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 );
        }
    }
    

    如果这是您要找的,请尝试。

    【讨论】:

    • 这不起作用,因为我之后没有订单 ID - 我只有在结帐过程中才有数量信息,所以我必须在此过程中以某种方式更改它
    • 之后你就有了。每个订单都会通过付款完成状态并且您知道订单ID。或者您想在付款期间更改数量,以便客户获得比购物车中更多的商品(可能定价更高)?
    • 不,它仅用于后端目的,以便我们在后端看到正确的项目数量
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2021-01-07
    • 2017-04-04
    • 1970-01-01
    • 2018-10-14
    • 2021-04-02
    • 2017-09-17
    • 2013-04-20
    相关资源
    最近更新 更多