首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Woocommerce中,只为特定的订单状态和支付方式减少库存

在Woocommerce中,只为特定的订单状态和支付方式减少库存
EN

Stack Overflow用户
提问于 2018-02-19 10:22:28
回答 1查看 5.3K关注 0票数 4

我正在为客户端开发一些定制的Woocommerce功能。他们使用BACS支付网关来处理人工支付。

然而,网关目前减少库存太早,以满足我们的需要,即,当订单是“搁置”。我只想减少库存时,订单被标记为“处理”或“完成”(避免重复削减)。

为了防止股票在“暂停”的同时使用以下代码片段,我进行了整理:

代码语言:javascript
运行
复制
function wcs_do_not_reduce_onhold_stock( $reduce_stock, $order ) {
if ( $order->has_status( 'on-hold' ) ) {
$reduce_stock = false;
}
return $reduce_stock;
}
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_onhold_stock', 10, 2 );

不过,我不太确定该怎么做。虽然上面的代码可以工作,但是添加以下条件不会:

代码语言:javascript
运行
复制
else if ( $order->has_status( 'processing' ) || $order->has_status( 'completed' ) ) {
$reduce_stock = true;
}

简而言之,理想情况下,我希望根据以下股票状态来更改股票:

  • 暂停-什么也不做
  • 完成或处理-减少库存(仅一次)
  • 取消-增加库存(只有在最初减少的情况下)

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-19 11:42:24

使用woocommerce_order_status_changed中挂起的自定义函数,您将能够以“处理”和“完成”订单状态为目标,更改订单状态,减少订单项库存。

我在您的功能中添加了一个条件,只针对订单上的"BACS“支付网关。

代码语言:javascript
运行
复制
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_onhold_stock', 10, 2 );
function wcs_do_not_reduce_onhold_stock( $reduce_stock, $order ) {
    if ( $order->has_status( 'on-hold' ) && $order->get_payment_method() == 'bacs' ) {
        $reduce_stock = false;
    }
    return $reduce_stock;
}

add_action( 'woocommerce_order_status_changed', 'order_stock_reduction_based_on_status', 20, 4 );
function order_stock_reduction_based_on_status( $order_id, $old_status, $new_status, $order ){
    // Only for 'processing' and 'completed' order statuses change
    if ( $new_status == 'processing' || $new_status == 'completed' ){
    $stock_reduced = get_post_meta( $order_id, '_order_stock_reduced', true );
        if( empty($stock_reduced) && $order->get_payment_method() == 'bacs' ){
            wc_reduce_stock_levels($order_id);
        }
    }
}

代码位于活动子主题(或活动主题)的function.php文件中。

测试和工程

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48863990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档