WooCommerce开发:检查用户是否有未完成付款的订单
在实际使用中,可能会出现同一用户提交订单后由于某种原因未完成付款操作,然后再次提交新订单的情况。
如果您想避免这个问题,您可以检查当前用户(根据邮箱地址判断)是否有待处理的付款订单。如果有,请他登录账户并完成支付,如下图所示:
已实现 完整代码如下:
/**
* @snippet Deny Checkout to User With Pending Orders | WooCommerce
* @how-to Get CustomizeWoo.com FREE
* @sourcecode https://businessbloomer.com/?p=55387
* @author Rodolfo Melogli
* @testedwith WooCommerce 3.0.5
*/
add_action('woocommerce_after_checkout_validation', 'bbloomer_deny_checkout_user_pending_orders');
function bbloomer_deny_checkout_user_pending_orders( $posted ) {
global $woocommerce;
$checkout_email = $posted['billing_email'];
$user = get_user_by( 'email', $checkout_email );
if ( ! empty( $user ) ) {
$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => $user->ID,
'post_type' => 'shop_order', // WP订单文章类型
'post_status' => 'wc-pending' // 获取未完成支付的订单
) );
foreach ( $customer_orders as $customer_order ) {
$count++;
}
if ( $count > 0 ) {
wc_add_notice( 'Sorry, please pay your pending orders first by logging into your account', 'error');
}
}
}
首先通过邮件获取用户ID,然后询问用户是否有待付款订单。如果是,则返回错误消息。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。