Contact Form 7如何实现字段特定数字校验的简易验证码功能
这个功能完全可以通过Contact Form 7(CF7)原生的文本字段或数字字段实现,不需要额外安装第三方验证码插件,通过CF7自带的验证钩子就能完成自定义校验,具体实现步骤如下:
步骤1:在CF7表单中添加验证字段
你可以根据答案类型选择字段:如果答案是数字优先用数字字段(会自动拦截非数字格式的无效输入),如果是文本答案用普通文本字段即可。
以「狗有多少条腿?」的验证场景为例,在CF7表单编辑区插入如下字段代码:
<label>狗有多少条腿? [number dog-leg-captcha]</label>
注意dog-leg-captcha是这个字段的自定义名称,后续校验逻辑需要匹配这个名称,不要和表单内其他字段重名。如果需要设置为必填项,把[number dog-leg-captcha]改成[number* dog-leg-captcha]即可。
步骤2:添加自定义校验规则
将下面的代码添加到当前使用主题的functions.php文件中(优先放在子主题的functions.php里,避免主题更新覆盖代码):
// 数字字段校验钩子 add_filter('wpcf7_validate_number', 'custom_simple_captcha_check', 10, 2); add_filter('wpcf7_validate_number*', 'custom_simple_captcha_check', 10, 2); // 如果使用文本字段,注释掉上面两行,启用下面两行钩子即可 // add_filter('wpcf7_validate_text', 'custom_simple_captcha_check', 10, 2); // add_filter('wpcf7_validate_text*', 'custom_simple_captcha_check', 10, 2); function custom_simple_captcha_check($result, $tag) { // 配置项:按需修改下面三个参数即可 $captcha_field_name = 'dog-leg-captcha'; // 你刚才设置的字段名称 $correct_answer = '4'; // 验证问题的正确答案 $error_tip = '抱歉,答案错误'; // 校验失败的提示文案 $tag = new WPCF7_FormTag($tag); if ($tag->name === $captcha_field_name) { $user_input = isset($_POST[$captcha_field_name]) ? trim($_POST[$captcha_field_name]) : ''; if ($user_input !== $correct_answer) { $result->invalidate($tag, $error_tip); } } return $result; }
步骤3:效果验证
保存代码后清空站点缓存,前台提交表单测试:输入非4的内容提交时,会自动在该字段下方展示你设置的「抱歉,答案错误」提示;输入正确答案4时可以正常提交表单,符合你的需求。
调整说明
- 更换验证问题时,只需要修改表单内的问题文案、代码里的字段名、正确答案三个配置项即可,比如换成文字类问题「中国的全称是什么?」,就把字段换成文本字段,启用文本字段对应的钩子,正确答案填
'中华人民共和国'即可。 - 代码里已经对用户输入做了首尾空格清除处理,避免用户不小心输入前后空格导致正确答案被误判。
- 不要用过于简单的固定问题长期不更换,否则简易验证码容易被垃圾程序批量识别绕过,可以定期更换问题和答案提升拦截效果。
内容的提问来源于stack exchange,提问作者janw
相关产品推荐
相关产品推荐

