You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Contact Form 7:邮箱与电话字段自定义验证问题求助

Contact Form 7 邮箱/电话二选一必填验证修复方案

原代码的问题分析

出现500服务器错误的核心原因有三点:

  • 调用了不存在的函数sanitize_email_field,正确的邮箱格式化函数是sanitize_email
  • 直接通过$tags[0]、$tags[1]取字段对象,表单标签顺序不固定,容易触发不存在对象的方法调用错误
  • 错误尝试修改字段属性来取消必填,Contact Form 7的验证逻辑中,应直接操作验证结果$result来添加/移除错误,而非修改字段本身

修复后的代码

替换原代码为以下内容,即可实现「邮箱/电话填写任意一项即可提交」的需求:

add_filter('wpcf7_validate', 'custom_cf7_email_phone_validation', 20, 2);
function custom_cf7_email_phone_validation($result, $tags) {
    // 获取提交的字段值并格式化
    $email = isset($_POST['your-email']) ? sanitize_email($_POST['your-email']) : '';
    $phone = isset($_POST['your-phone']) ? sanitize_text_field($_POST['your-phone']) : '';

    // 两个字段都为空时,添加错误提示
    if (empty($email) && empty($phone)) {
        $result->invalidate('your-email', '请填写邮箱或电话中的一项');
        $result->invalidate('your-phone', '请填写邮箱或电话中的一项');
    } else {
        // 只要有一个字段填写,就清除两个字段的必填错误
        if (isset($result->errors['your-email'])) {
            unset($result->errors['your-email']);
        }
        if (isset($result->errors['your-phone'])) {
            unset($result->errors['your-phone']);
        }
    }

    return $result;
}

代码说明

  1. 先判断两个字段是否都为空,若是则给两个字段添加统一的错误提示
  2. 若任意一个字段有内容,就手动移除Contact Form 7默认触发的必填错误
  3. 使用官方标准的格式化函数处理字段值,避免函数不存在的报错
  4. 通过字段名精准操作,不依赖标签顺序,避免对象调用异常

内容的提问来源于stack exchange,提问作者Crazy Explorer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:27:20