避免在Woocommerce中减少具有处理状态的COD订单的库存

时间:2018-09-15 09:09:58

标签: php wordpress woocommerce orders stock

当客户下订单时,我在使用COD付款方式时遇到了麻烦...订单正在处理中,从而减少了物料库存。

基于以下答案线程:Reduce stock only for specific order statuses and payment method in 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;
}

但这不起作用。

如何使用状态为“处理中”的“货到付款”付款方式避免订单的库存减少?

1 个答案:

答案 0 :(得分:1)

我稍微更改了您的代码,并添加了缺失的代码,这将减少仅适用于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文件中。经过测试并有效