在Woocommerce中启用自定义结帐电子邮件字段验证

艾哈迈德·哈桑|

我通过以下代码在WooCommerce Checkout上添加了自定义电子邮件字段

woocommerce_form_field('giftcard-friend-email', array(
'type'        => 'email',
'class'       => array( 'form-row-wide' ),
'required'    => true,
'label'       => __('To: Friend Email') ,
'placeholder' => __('Friend Email') ,
),
$checkout->get_value('giftcard-friend-email'));

它可以正常工作,所需的验证也可以,但是当输入的电子邮件地址无效时它不会出错。

我想知道是否有内置的WooCommerce方法可以实现与帐单电子邮件相同的功能?

谢谢!

LoicTheAztec

您应该始终在问题中提供完整的功能代码以及所有相关代码。

我已将其更改giftcard-friend-email_giftcard_friend_email更普通的条,因为它将被保存为订单元数据,因此下划线是更好的选择。

以下代码将:

  • 在结帐页面上显示自定义电子邮件字段(因此删除您的代码)。
  • 将验证此电子邮件字段是否为空以及是否为有效电子邮件。
  • 下订单时将此自定义电子邮件值另存为订单元数据

编码:

// Display the custom checkout field
add_action('woocommerce_before_order_notes', 'add_custom_checkout_field', 20, 1 );
function add_custom_checkout_field( $checkout ) {

    echo '<div id="friend_email_checkout_field">';

    woocommerce_form_field( '_giftcard_friend_email', array(
        'type'        => 'email',
        'label'       => __('To: Friend Email') ,
        'placeholder' => __('Friend Email') ,
        'class'       => array( 'form-row-wide' ),
        'required'    => true,
    ), $checkout->get_value('_friend_email') );

    echo '</div>';
}

// Field custom email Validation
add_action( 'woocommerce_checkout_process', 'friend_email_checkout_field_validation' );
function friend_email_checkout_field_validation() {
    if( isset($_POST['_giftcard_friend_email']) && empty($_POST['_giftcard_friend_email']) )
        wc_add_notice( __( 'Please fill in the "Friend Email" field.', 'woocommerce' ), 'error' );
    elseif( !preg_match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$^", $_POST['_giftcard_friend_email'] ) ){
        wc_add_notice( __( 'Please enter a valid "Friend Email".', 'woocommerce' ), 'error' );
    }
}

// Save the checkout field value to order meta data
add_action('woocommerce_checkout_create_order', 'save_friend_email_checkout_field_value', 20, 2 );
function save_friend_email_checkout_field_value( $order, $data ) {
    if ( isset( $_POST['_giftcard_friend_email'] ) ) {
        $order->update_meta_data( '_giftcard_friend_email', sanitize_email( $_POST['_giftcard_friend_email'] ) );
    }
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Woocommerce自定义电子邮件结帐

使Woocommerce(3.8.0)管理员电子邮件中包含我在结帐页面上的自定义字段数据

woocommerce将自定义结帐字段添加到电子邮件

在电子邮件通知上显示WooCommerce自定义结帐字段值

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

联系表单自定义电子邮件字段验证

Woocommerce 3中的自定义结帐字段验证

Woocommerce中的条件自定义结帐字段验证问题

自定义验证电子邮件和确认电子邮件匹配字段的要求

在WooCommerce订单和电子邮件通知中显示自定义字段值

在Woocommerce管理员电子邮件通知中显示产品自定义字段值

在Woocommerce订单和电子邮件中显示产品变体的自定义字段

在WooCommerce“订单已完成”电子邮件中添加自定义产品字段

在Woocommerce管理员,订单和电子邮件中显示自定义付款字段

在WooCommerce电子邮件通知中为管理员显示自定义字段

WooCommerce电子邮件模板中的ACF自定义字段

WooCommerce电子邮件上的订单自定义字段中的替换收件人

基于WooCommerce中的自定义字段值的电子邮件收件人

在woocommerce电子邮件中输出产品自定义字段(图像)

订单自定义字段未显示在WooCommerce电子邮件通知中

WooCommerce 订单电子邮件中未显示自定义电话号码字段

WooCommerce 电子邮件模板中的高级自定义字段

获取要在 Woocommerce 电子邮件通知中显示的自定义字段值

在woocommerce订单电子邮件中显示多个产品的自定义字段

如何将自定义结帐字段打印到电子邮件订单详细信息中

使用Woocommerce电子邮件中的自定义字段自定义格式化的计费全名

Woocommerce新订单电子邮件通知中的自定义“回复”电子邮件标题

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

如何在woocommerce中的新订单电子邮件中显示高级自定义字段数据