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; }
代码说明
- 先判断两个字段是否都为空,若是则给两个字段添加统一的错误提示
- 若任意一个字段有内容,就手动移除Contact Form 7默认触发的必填错误
- 使用官方标准的格式化函数处理字段值,避免函数不存在的报错
- 通过字段名精准操作,不依赖标签顺序,避免对象调用异常
内容的提问来源于stack exchange,提问作者Crazy Explorer
相关产品推荐
相关产品推荐

