php - 仅在 WooCommerce 结帐中为新用户添加验证电子邮件地址

标签 php wordpress woocommerce checkout email-validation

我想向 WooCommerce 结账页面添加电子邮件地址验证字段,但仅限新用户。因此,如果用户已经登录,则不应要求他们提供验证电子邮件地址字段。

我已将此代码添加到我的functions.php 中,并且效果很好。它要求提供电子邮件地址,但它也会为已经登录的用户执行此操作。

add_filter( 'woocommerce_checkout_fields', 'bbloomer_add_email_verification_field_checkout' );

function bbloomer_add_email_verification_field_checkout( $fields ) {

    $fields['billing']['billing_email']['class'] = array('form-row-first');

    $fields['billing']['billing_em_ver'] = array(
        'label'     => __('Email Address Verification', 'bbloomer'),
        'required'  => true,
        'class'     => array('form-row-last'),
    'clear'     => true
    );

    return $fields;
}

// ---------------------------------
// 3) Generate error message if field values are different

add_action( 'woocommerce_checkout_process', 'bbloomer_matching_email_addresses' );
function bbloomer_matching_email_addresses() { 
    $email1 = $_POST['billing_email'];
    $email2 = $_POST['billing_em_ver'];
    if ( $email2 !== $email1 ) {
        wc_add_notice( __( 'Your email addresses do not match', 'bbloomer' ), 
 'error' );
    }
}

如何使该字段仅对未登录的用户显示?

最佳答案

我对您的代码进行了一些更改,并添加了必要的条件,使其仅适用于未登录的用户:

// Add or change Woocommerce Checkout fields
add_filter( 'woocommerce_checkout_fields', 'add_billing_email_check_field', 20, 1 );
function add_billing_email_check_field( $fields ) {
    // Only for non logged in users
    if( is_user_logged_in() ) return $fields;

    $fields['billing']['billing_email']['class'] = array('form-row-first');

    $fields['billing']['billing_email_check'] = array(
        'label'     => __('Email Address Verification', 'woocommerce'),
        'required'  => true,
        'class'     => array('form-row-last'),
        'clear'     => true
    );

    return $fields;
}

// Billing email validation check error message
add_action( 'woocommerce_checkout_process', 'billing_email_validation_check' );
function billing_email_validation_check() {
    if ( isset( $_POST['billing_email'] ) && isset( $_POST['billing_email_check'] ) &&
        $_POST['billing_email'] !== $_POST['billing_email_check'] )
        wc_add_notice( __( 'Your <strong>billing email address</strong> does not match.', 'woocommerce' ), 'error' );
}

代码位于事件子主题(或事件主题)的 function.php 文件中。经过测试并可以工作。

关于php - 仅在 WooCommerce 结帐中为新用户添加验证电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51482965/

相关文章:

php - 将 Javascript 数组传递给 PHP 文件

php - 用 + 增加一个计数器并将值存储到数据库

mysql - 如何在 Wordpress 网站上显示数据库查询统计信息?

php - WooCommerce:强制执行最小长度电话号码字段

php - 在不使用子查询的情况下在 MySQL 中运行多个查询

php - 如何在 Wordpress 中制作信息图 "Wide"

php - WooCommerce 自定义模板price.php 上的小数分隔符问题

php - 每个订单项的 WooCommerce 优惠券代码

javascript - WooCommerce 自定义简码产品类别下拉列表

php - 如何根据另一个表的ID获取表中的行数