php - 避免在 Woocommerce 中具有处理状态的 COD 订单的库存减少
问题描述
当客户订购时,我的 COD 付款方式出现问题...订单正在处理中,并且减少了商品库存。
基于此答案线程:仅针对 Woocommerce 中的特定订单状态和付款方式减少库存,我自定义了代码并尝试了此脚本:
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_processing_stock', 10, 2 );
function wcs_do_not_reduce_processing_stock( $reduce_stock, $order ) {
if ( $order->has_status( 'processing' ) && $order->get_payment_method() == 'cod' ) {
$reduce_stock = false;
}
return $reduce_stock;
}
但它不起作用。
对于使用“货到付款”付款方式且处于“处理中”状态的订单,如何避免订单商品的库存减少?
解决方案
我已经稍微更改了您的代码,并添加了缺失的代码,这将减少仅 COD 付款方式的“已完成”订单状态的库存:
add_filter( 'woocommerce_can_reduce_order_stock', 'processing_cod_stock_not_reduced', 20, 2 );
function processing_cod_stock_not_reduced( $reduce_stock, $order ) {
if ( ! $order->has_status( 'completed' ) && $order->get_payment_method() == 'cod' ) {
return false;
}
return $reduce_stock;
}
// Reduce stock on COD orders with completed status
add_action( 'woocommerce_order_status_completed', 'order_stock_reduction_based_on_payment_method', 20, 2 );
function order_stock_reduction_based_on_payment_method( $order_id, $order ){
if( $order->get_payment_method() == 'cod' && ! get_post_meta( $order_id, '_order_stock_reduced', true ) ){
wc_reduce_stock_levels($order_id);
}
}
代码位于活动子主题(或活动主题)的 function.php 文件中。测试和工作
推荐阅读
- flutter - dart 中的错误处理 - 评估用户输入
- android - Flutter Websocket 使用 STOMP - 消息未接收
- python - Matplotlib:在动画期间包括某些点
- pine-script - IB数据的选定时间段进行数据分析
- javascript - 从实时 videojs hls 流中获取 MediaStream
- ruby-on-rails - Apple Silicon (M1) 上 Docker 中的 Ruby on Rails
- jquery - 如何防止 jquery 函数运行?
- jquery - 根据第一个日期选择器设置第二个日期选择器的 minDate
- c# - [CascadingParameter] 与 [Parameter] 相比是否会影响性能?
- security - 如何删除服务器标头 .NET Core Blazor 应用程序