【问题标题】:Woocommerce Checkout Indian Mobile Number ValidationWoocommerce Checkout 印度手机号码验证
【发布时间】:2018-12-07 09:54:16
【问题描述】:

我已经在 woocommerce 结帐字段中添加了这段代码来验证手机号码,并且正则表达式也可以正常工作,但这里是个小问题 1) 当客户输入错误的手机号码时 wp_add_notice 没有向客户打印错误信息 2) 当客户输入正确的手机号码时,会显示错误消息,客户会转到其他付款选项 总结:它不会打印我想要的错误手机号码的错误消息。

// Custom validation for Billing Phone checkout field
add_action('woocommerce_checkout_process', 'custom_validate_billing_phone');
function custom_validate_billing_phone() {
    $is_correct = preg_match('/^[6-9]\d{9}$/', $_POST['billing_phone']);
    if ( $_POST['billing_phone'] && !$is_correct) {
        wc_add_notice( __( 'The Mobile No. should be <strong>10 digits with starting 6,7,8,9</strong>.Try Again.' ), 'error' );
    }
}

【问题讨论】:

  • 你的条件不对。通过使用$_POST['billing_phone'],您正在检索数组的值而不是值的存在。 preg_match 根据文档返回一个数字,因此您的情况类似于:if ( 6999999999 &amp;&amp; !1) 这是错误的。
  • 那么请告诉我应该写什么条件
  • if (preg_match('/^[6-9]\d{9}$/', $_POST['billing_phone']) === 0)
  • 它仍然有同样的问题,当我输入错误的手机号码时,它在错误消息中没有显示任何内容,但用户仍在同一页面上,但如果我输入正确的手机号码,则会显示错误消息并且用户重定向到付款网关
  • 我已经测试了匹配的6999999999 和不匹配的4999999999 并且它正在工作。不过,我不是在谈论您的重定向。你能给我你正在测试的值吗?这是代码。 sandbox.onlinephpfunctions.com/code/…

标签: wordpress woocommerce checkout


【解决方案1】:

在我看来,无需覆盖默认的 Woocommerce 字段,也无需使用 Javascript 验证。 您可以添加自定义验证,该验证将添加到 Woocommerce 的默认计费电话字段验证中,挂钩到提交结帐后触发的操作。

这是我刚刚为客户实现的代码。

// Custom validation for Billing Phone checkout field
add_action('woocommerce_checkout_process', 'custom_validate_billing_phone');
function custom_validate_billing_phone() {
    $is_correct = preg_match('/^[0-9]{6,20}$/', $_POST['billing_phone']);
    if ( $_POST['billing_phone'] && !$is_correct) {
        wc_add_notice( __( 'The Phone field should be <strong>between 6 and 20 digits</strong>.' ), 'error' );
    }
}

当然,代替我的 preg_match,您可以检查其他任何内容并根据需要调整条件代码。

当然,在正确设置它们之后,您还可以通过检查正确的 $_POST 变量或您自己的自定义结帐字段来为其他默认字段添加自定义验证,但这是另一个主题 :)

希望这会有所帮助。

【讨论】:

猜你喜欢
  • 2018-07-13
  • 2017-03-05
  • 1970-01-01
  • 2013-08-23
  • 2013-04-14
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多