【问题标题】:Woocommerce update stock by ID after paymentWoocommerce 付款后按 ID 更新库存
【发布时间】:2020-11-26 00:28:57
【问题描述】:

我为 WooCommerce 创建了一个自定义产品类型。使用此产品类型,可以连接按 ID 存在的其他产品。

如果下单且付款成功,WooCommerce 会自动减少库存数量。 例如,我将 ID 为 4082 的产品添加到购物车,数量为 3。 下订单后,WooCommerce 将产品 4082 的库存更新为 -3。

好的,回到我的自定义产品类型。正如我所说,可以通过 ID 连接另一个产品。 例如,我将产品 4082 与产品 ID 10988 连接。

如果客户将产品 4082 添加到购物车并下订单,我想从产品 ID 10988 而不是从 4082 减少库存数量。

<?php
add_action('woocommerce_checkout_order_processed', 'stocktest');

function stocktest($order_id){
    $order = wc_get_order( $order_id );
    $order_item = $order->get_items();
    foreach( $order_item as $product ) {
    //for the topic I programmed the IDs hardcoded 
        if($product->ID == '4082'){
            wc_update_product_stock( 10998, $product['qty'], 'decrease', '' );
        }
    }
}
?>

我尝试了上面的代码,ID 10998 的库存正确减少了,但 ID 4082 的库存也减少了。

我是否使用了错误的钩子?以及如何才能正确地实现功能?

希望有人可以帮助我。

非常感谢

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    wc_update_product_stock( 4082, $product['qty'], 'increase', '' ); 不工作吗?

    这样,库存应该针对 4082 产品进行调整。

    此外,您的 sn-p 可能存在潜在问题。 $product 变量是指4082 产品的产品对象,而不是10998 产品。

    也许可以试试这样?

    <?php
    add_action('woocommerce_checkout_order_processed', 'stocktest');
    
    function stocktest($order_id){
        $order = wc_get_order( $order_id );
        $order_item = $order->get_items();
        foreach( $order_item as $product ) {
        //for the topic I programmed the IDs hardcoded 
            if($product->ID == '4082'){
                $connected_qty = get_post_meta( 10988, '_stock', true );
                wc_update_product_stock( 10998, $connected_qty, 'decrease', '' );
                wc_update_product_stock( 4082, $product['qty'], 'increase', '' );
            }
        }
    }
    ?>
    

    您可以使用 WC_Product 类,而不是使用自定义字段查询:

    $connected_product = wc_get_product(10998);
    $connected_qty = $connected_product->get_stock_quantity();
    

    【讨论】:

      【解决方案2】:

      我对你的问题做了一些研究。 WooCommerce 调用了很多函数来更新订单/付款的库存。如果下订单,项目将变为状态 reduce_stock 是或否。 如果是,请进一步更新该商品的库存。在此之后,WooCommerce 创建了电子邮件和订单注释。

      所有这些功能一起工作,请注意更改文件中的代码 wc-stock-functions.php

      如果您想更改并尝试某些操作,例如在本地测试服务器上执行此操作。

      这是文件中的一些函数

      <?php
      wc_maybe_reduce_stock_levels();
      wc_maybe_increase_stock_levels();
      wc_reduce_stock_levels();
      wc_trigger_stock_change_notifications();
      ?>
      

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 2019-08-29
        • 2018-01-10
        • 2018-05-23
        • 2016-11-02
        • 2013-12-29
        • 2021-08-20
        • 2023-03-30
        • 2023-03-21
        相关资源
        最近更新 更多