WooCommerce 在输入邮政编码之前阻止结帐

Posted

技术标签:

【中文标题】WooCommerce 在输入邮政编码之前阻止结帐【英文标题】:WooCommerce prevent checkout until post code entered 【发布时间】:2018-07-31 11:47:22 【问题描述】:

试图阻止客户在输入邮政编码之前点击“继续付款”按钮。但是,我发现使用下面的功能,如果您更改数量并更新购物车 - 该功能不再起作用,您可以继续进行免运费付款。有什么想法吗?

add_action( 'wp_head', 'prevent_proceed_to_checkout' );

function prevent_proceed_to_checkout() 
    echo 'alert(Please enter postcode before payment!")';

【问题讨论】:

【参考方案1】:

已更新 - 3 种方式 - (添加了替代方法)

1) 如果邮政编码未填写,您可以使用以下代码“避免继续结帐”结帐:

// Avoiding checkout when postcode has not been entered
add_action( 'woocommerce_check_cart_items', 'check_shipping_postcode' ); // Cart and Checkout
function check_shipping_postcode() 
    $customer = WC()->session->get('customer');
    if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) )
        // Display an error message
        wc_add_notice( __("Please enter your postcode before checkout", "woocommerce"), 'error' );
    

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

购物车页面:

结帐页面中:


2) 尝试这种替代方式(检查邮政编码并重定向到购物车以避免结帐):

add_action('template_redirect', 'check_shipping_postcode');
function check_shipping_postcode() 
    // Only on checkout page (and cart for the displayed message)
    if ( ( is_checkout() && ! is_wc_endpoint_url() ) || is_cart() ) 
        $customer = WC()->session->get('customer');
        if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) )
            wc_add_notice( __("Please enter your postcode before checkout", "woocommerce"), 'error' );
            if( ! is_cart() )
                wp_redirect(wc_get_cart_url());
                exit();
            
        
    

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

购物车页面:


3)以上两者的组合(避免结帐页面):

// Avoiding checkout when postcode has not been entered
add_action( 'woocommerce_check_cart_items', 'check_shipping_postcode' ); // Cart and Checkout
function check_shipping_postcode() 
    $customer = WC()->session->get('customer');
    if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) )
        // Display an error message
        wc_add_notice( __("Please enter your postcode before checkout", "woocommerce"), 'error' );
    


add_action('template_redirect', 'shipping_postcode_redirection');
function shipping_postcode_redirection() 
    // Only on checkout page
    if ( is_checkout() && ! is_wc_endpoint_url() ) 
        $customer = WC()->session->get('customer');
        if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) )
            wp_redirect(wc_get_cart_url());
            exit();
        
    

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

购物车页面:

【讨论】:

感谢您的回复,但不幸的是没有工作,也许是因为我有第三方支付网关?除了在购物车中立即显示通知之外,没有真正发生任何事情 @ViktorFonster Strange...我添加了第二个替代方案...请尝试一下。即使您有自定义支付网关,它也应该可以工作。 酷!它几乎奏效了!即使您更改数量等。唯一的问题是购物车简单地重新加载并且没有显示错误通知。也许一个懒惰的解决方案是,如果我将用户重定向到带有通知和返回购物车按钮的页面(这不会那么好),或者只是有一个总是显示需要邮政编码的大通知? 不幸的是:(@ViktorFonster 我有第三种选择,应该满足您的需求。

以上是关于WooCommerce 在输入邮政编码之前阻止结帐的主要内容,如果未能解决你的问题,请参考以下文章

如何将 2 个选择字段(组合框)添加到 woocommerce 结帐页面?

在 WooCommerce 结帐的付款部分之前移动优惠券表格

如何防止 Woocommerce 在结帐页面上选择默认付款方式?

WooCommerce - 禁用邮政编码验证

在验证之后但在 Woocommerce 结帐中创建订单之前挂钩

php 在WooCommerce结帐付款之前添加自定义通知