我正在使用 WooCommerce 销售一些数字产品。由于我们业务的性质,我们不希望商品库存低于 0(-1、-2 等)
我们目前接受不同的付款方式,包括加密货币和 Stripe。由于加密货币的交易速度较低,有时需要长达1小时,所以我们面临这样的问题:
因此 2 个用户获得相同的产品。
如何预防这个问题?
我还没找到解决办法。
对于使用特定付款方式通过的订单(未经测试),以下应更改持货时间(默认60分钟)。
请参阅如何在 WooCommerce 中获取付款方式的 ID?。
在下面的函数中,您将定义所需的付款方式 ID (针对您的加密货币付款选项) 以及所需的持有股票时间(以分钟为单位):
add_action( 'woocommerce_checkout_order_created', 'wc_reserve_stock_for_crypto', 5 );
function wc_reserve_stock_for_crypto( $order ) {
// HERE below define the desired payment ID(s)
$targeted_payment_ids = array('coinbase', 'coinpayments');
// HERE below define the time in minutes to hold stock
$hold_stock_minutes = 150;
if ( in_array( $order->get_payment_method(), $targeted_payment_ids ) ) {
// Remove the default functionality to hold stock for 60 minutes
remove_action( 'woocommerce_checkout_order_created', 'wc_reserve_stock_for_order' );
if ( ! apply_filters( 'woocommerce_hold_stock_for_checkout', wc_string_to_bool( get_option( 'woocommerce_manage_stock', 'yes' ) ) ) ) {
return;
}
$order = $order instanceof WC_Order ? $order : wc_get_order( $order );
if ( $order ) {
// Add back the functionality with a custom delay to hold the stock
( new \Automattic\WooCommerce\Checkout\Helpers\ReserveStock() )->reserve_stock_for_order( $order, $hold_stock_minutes );
}
}
}
代码位于子主题的functions.php 文件中(或插件中)。应该可以。