You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Contact Form 7:实现支持多邮箱地址的邮箱字段验证

Contact Form 7:实现支持多邮箱地址的邮箱字段验证

嗨,这个需求我之前折腾过,刚好可以给你分享两种实用的方案,都能实现支持多邮箱地址验证的CF7字段:

方案一:自定义多邮箱字段短代码+验证规则

这个方法会新增一个专属的多邮箱字段类型,和默认字段区分开,逻辑更清晰:

  1. 打开主题目录下的functions.php文件,添加以下代码创建自定义短代码:
add_shortcode( 'email_multiple', 'cf7_multiple_email_field' );
function cf7_multiple_email_field( $atts ) {
    $atts = shortcode_atts( array(
        'name' => 'multiple-emails',
        'id' => '',
        'class' => '',
        'placeholder' => '',
    ), $atts );
    
    $html = sprintf(
        '<input type="email" name="%s" id="%s" class="%s wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-email" placeholder="%s" />',
        esc_attr( $atts['name'] ),
        esc_attr( $atts['id'] ),
        esc_attr( $atts['class'] ),
        esc_attr( $atts['placeholder'] )
    );
    
    return $html;
}
  1. 接着添加验证规则,让这个字段支持多邮箱格式检查:
add_filter( 'wpcf7_validate_email', 'cf7_multiple_email_validation', 10, 2 );
add_filter( 'wpcf7_validate_email*', 'cf7_multiple_email_validation', 10, 2 );

function cf7_multiple_email_validation( $result, $tag ) {
    $name = $tag->name;
    $value = isset( $_POST[$name] ) ? trim( $_POST[$name] ) : '';
    
    if ( empty( $value ) ) {
        return $result; // 空值交给CF7默认的必填验证处理
    }
    
    // 拆分逗号分隔的邮箱,同时清理每个邮箱前后的空格
    $emails = array_map( 'trim', explode( ',', $value ) );
    
    foreach ( $emails as $email ) {
        if ( ! is_email( $email ) ) {
            $result->invalidate( $tag, '请输入有效的邮箱地址,多个邮箱请用逗号分隔' );
            break;
        }
    }
    
    return $result;
}
  1. 在CF7表单编辑器里使用这个自定义字段:
    直接添加短代码 [email_multiple name="recipient-emails" placeholder="请输入邮箱,多个用逗号分隔"],如果要设置为必填,就加星号 [email_multiple* name="recipient-emails" ...]

方案二:修改默认邮箱字段的验证逻辑

如果你不想新增字段类型,直接改造默认的邮箱字段,让它支持多邮箱验证,只需在functions.php中添加以下代码:

add_filter( 'wpcf7_validate_email', 'cf7_modify_default_email_validation', 10, 2 );
add_filter( 'wpcf7_validate_email*', 'cf7_modify_default_email_validation', 10, 2 );

function cf7_modify_default_email_validation( $result, $tag ) {
    $name = $tag->name;
    $value = isset( $_POST[$name] ) ? trim( $_POST[$name] ) : '';
    
    if ( empty( $value ) ) {
        return $result;
    }
    
    // 处理逗号分隔的多个邮箱,自动清理空格
    $emails = array_map( 'trim', explode( ',', $value ) );
    
    foreach ( $emails as $email ) {
        if ( ! is_email( $email ) ) {
            $result->invalidate( $tag, '包含无效的邮箱格式,多个邮箱请用逗号分隔' );
            break;
        }
    }
    
    return $result;
}

这样原来的默认邮箱字段 [email* recipient-emails placeholder="多个邮箱用逗号分隔"] 就可以直接支持多邮箱验证了,不需要改短代码。

最后补充:发送邮件的设置

不管用哪种方案,在CF7的「邮件」设置里,收件人一栏直接填写字段的短代码标记(比如[recipient-emails])即可,CF7会自动识别逗号分隔的多个邮箱地址并发送邮件。

测试的时候可以试试输入 test1@example.com, test2@example.com(带空格也没问题),如果输入无效格式比如test@example,表单会弹出错误提示,完全符合需求~

备注:内容来源于stack exchange,提问作者Christer Fernstrom

火山引擎 最新活动