【问题标题】:Need to customize wordpress contact form-7 form fields Validation需要自定义wordpress联系表单-7个表单域验证
【发布时间】:2015-05-10 16:28:29
【问题描述】:
在我的 Wordpress 网站中,我安装了 Contact Form-7 插件,但遇到了问题。我认为文本字段没有特殊的验证。同样对于电话字段,Contact Form-7 插件仅对 not null 或 blank 字段提供基本验证。
我的问题是:对于这些问题,我应该怎么做才能解决它们?我可以修改核心插件文件或创建自己的联系表单。
【问题讨论】:
标签:
php
forms
wordpress
contact-form
【解决方案1】:
在 Contact Form 7 中,用户输入验证被实现为过滤器功能。用于验证的过滤器挂钩根据表单标签的类型而有所不同,并确定为:wpcf7_validate_ + {表单标签的类型}。因此,对于文本表单标签,使用过滤器挂钩 wpcf7_validate_text。同样,wpcf7_validate_email* 用于 email* 表单标签。
假设您的表单中有以下电子邮件字段:
Email: [email* your-email]
Confirm email: [email* your-email-confirm]
以下清单显示了验证两个字段是否具有相同值的代码。
add_filter('wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2);
function custom_email_confirmation_validation_filter($result, $tag) {
$tag = new WPCF7_Shortcode($tag);
if ('your-email-confirm' == $tag->name) {
$your_email = isset($_POST['your-email']) ? trim($_POST['your-email']) : '';
$your_email_confirm = isset($_POST['your-email-confirm']) ? trim($_POST['your-email-confirm']) : '';
if ($your_email != $your_email_confirm) {
$result->invalidate($tag, "Are you sure this is the correct address?");
}
}
return $result;
}
两个参数将传递给过滤函数:$result 和 $tag。 $result 是管理一系列验证过程的 WPCF7_Validation 类的实例。 $tag 是一个关联数组,由给定的表单标签组件组成;正如您在上一个秘籍中看到的,您可以使用 WPCF7_Shortcode 类来处理这种类型的数据。
查看过滤器功能的内部。首先,检查表单标签的名称以确保验证仅应用于特定字段(您的电子邮件确认)。
然后比较两个电子邮件字段的值,如果它们不匹配,将调用 $result->invalidate()。您需要将两个参数传递给 invalidate() 方法:第一个参数应该是 $tag 变量,第二个参数是您希望该字段显示的验证错误消息。
最后,别忘了返回 $result。
【解决方案2】:
新的联系表格 7 插件在其最新更新中提供内置验证。