我们在WooCommerce商店提供BACS(银行转账(作为付款方式。如果有人使用这种方法:
- 该产品的库存减少
- 订单暂停48小时
我们面临的问题是,有些人利用了这一点,他们使用这种方法来预订产品。他们等待订单被取消,然后再做一次,只要他们有一些钱,他们就会实际支付。
作为一家二手店,这当然是不可取的行为。
有没有一种方法可以限制BACS订单的数量;"暂停";只有一个身份
这样,如果你想用BACS付款,而你的电子邮件已经有一个订单悬而未决,它会返回一个错误,你将无法完成结账。当然,人们可以使用不同的电子邮件,但它开始变得复杂起来。
感谢您的帮助。
更新-使用计费电子邮件添加客人
下面非常简单的挂钩功能将检查当前客户是否有任何";"暂停";BACS订单,如果是这种情况,它将显示一条错误消息,避免结账,如果当前订单使用BACS支付方式:
add_action( 'woocommerce_checkout_process', 'action_wc_checkout_process_callback' );
function action_wc_checkout_process_callback() {
if( is_user_logged_in() ) {
// Get customer "on-hold" orders
$orders = (array) wc_get_orders(['limit' => - 1, 'customer_id' => get_current_user_id(),
'status' => 'on-hold', 'return' => 'ids']);
} elseif ( isset($_POST['billing_email']) && ! empty($_POST['billing_email']) ) {
// Get customer "on-hold" orders
$orders = (array) wc_get_orders(['limit' => - 1, 'customer' => sanitize_email($_POST['billing_email']), 'status' => 'on-hold', 'return' => 'ids']);
}
// Check if the current customer has any "on-hold" BACS order and if current order is using BACS as payment method
if ( isset($orders) && count($orders) > 0 && isset($_POST['payment_method']) && $_POST['payment_method'] === 'bacs' ) {
// Display an error notice (and avoid checkout)
wc_add_notice( __( "You have already one order awaiting payment and you can have only one at the time.", "woocommerce" ), 'error' );
}
}
代码位于活动子主题(或活动主题(的functions.php文件中。测试并工作。