仅在 WooCommerce 结帐中为新用户添加验证电子邮件地址
Add a verification email address for new users only in WooCommerce checkout
我想向 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 文件。测试和工作。
我想向 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 文件。测试和工作。