Woocommerce 结帐中的电子邮件字段比较验证

Posted

技术标签:

【中文标题】Woocommerce 结帐中的电子邮件字段比较验证【英文标题】:Email fields comparison validation in Woocommerce checkout 【发布时间】:2019-04-21 00:52:51 【问题描述】:

我有一个名为 gift 的自定义字段,我现在正尝试根据 billing_email 字段验证它。也就是说,如果客户填写的赠品字段和账单邮件是同一封邮件,点击“完成订单”按钮时应该会报错。

它不起作用。任何想法为什么?这是代码。

// verify that billing email and gift email are not the same
function billing_email_and_gift_validation( $posted ) 
$checkout = WC()->checkout;
if ( strcmp( $posted['billing_email'] == $posted['gift'] )) 
wc_add_notice( __( 'To send as gift, you cannot send it to yourself. That\'s the point of a gift, is it not?', 'woocommerce' ), 'error' );  
add_action( 'woocommerce_after_checkout_validation', 'billing_email_and_gift_validation', 10, 2 );

如果有人可以提供帮助,谢谢大家。

【问题讨论】:

【参考方案1】:

我已将此验证与您之前制作的此问题代码中的礼物验证合并,因此您将从您的实际代码中删除它,因为此函数同时处理它们:

add_action('woocommerce_after_checkout_validation', 'gift_custom_field_validation', 20, 2 );
function gift_custom_field_validation( $data, $errors ) 
    // Validating that "Gift" is not empty when selected
    if( isset($_POST['gift_msg']) && isset($_POST['gift']) && empty($_POST['gift']) )
        $errors->add( 'gift', __( "You've chosen to send this as a gift, but did not submit a recipient email address.", "woocommerce" ) );

    // Validating that "Gift" imputed email is different from billing email
    if ( isset($_POST['gift']) && $data['billing_email'] === $_POST['gift'] ) 
        $errors->add( 'gift', __( "To send as gift, you cannot send it to yourself. That's the point of a gift, isn't it?", "woocommerce" ) );
    

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

【讨论】:

以上是关于Woocommerce 结帐中的电子邮件字段比较验证的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce 的 MailChimp:在结帐字段中间添加复选框

php [使用操作和过滤器自定义结帐字段]向电子邮件添加自定义WooCommerce结帐字段

自定义 WooCommerce 日期选择器结帐字段已保存并显示在订单和电子邮件中

在 Woocommerce 购物车、结帐页面、订单和电子邮件通知中的产品标题上方显示品牌名称

所有 WooCommerce 结帐字段的自定义占位符

WooCommerce 4.0 电子邮件、管理员订单和感谢页面上的自定义结帐和 ACF 字段值