联系表格 7 需要 2 个不同字段之一
Contact form 7 required one of 2 different fields
我在 CF7 中有一个图像上传字段和一个 URL 字段,我怎样才能让用户需要使用这两个字段之一。那么 select 一张图片或在 URL 字段中放置一个 link?
我已经搜索了一下,我看到了一些在普通 txt 字段上执行此操作的选项,但我认为这对我不起作用,因为上传字段。
我不认为 CF7 可以开箱即用。您可能需要深入研究代码才能解决此问题。
因为我不知道你的体型有多大,这也许可以帮助你:
https://wordpress.org/plugins/cf7-conditional-fields/ - CF 7 中条件字段的插件
https://conditional-fields-cf7.bdwm.be/conditional-fields-for-contact-form-7-tutorial/ - 教程如何使用它。
因此,使用此插件,您基本上可以创建一个下拉列表,如果用户想使用图像或使用 URL 字段,则用户首先必须在其中 select。之后,只有他的 selection 会弹出,他可以继续 selected 选项。
如果您想进行编码,可以向站点添加一些 JS,并检查验证是否填写了两个字段之一。
如果插件解决了您的问题 - 太好了,如果不能,请告诉我,我可以帮助您进行代码验证。
###编辑因为我们需要代码###
所以为了动态改变所需的功能,我发现了一个非常好的 post:
Dynamically Disable Contact Form 7 Field Validation
一些背景信息:
CF7 在服务器端进行验证,因此在这种情况下使用 JS 或 JQuery 无济于事。我们要做的是操纵服务器验证。如果其中一个字段填写正确,我们只是将内容放在另一个字段中进行验证。
我创建了一个如下所示的表单:
CF7 模块中的表单如下所示:
<label> URL
[url* url ]
<label> Image
[file* image ]
[submit "Send"]
然后您只需将以下代码添加到主题的 functions.php 文件中。
function alter_wpcf7_posted_data( $data ) {
if($_FILES['image']['size'] != 0) {
$_POST['url'] = "http://fileupload.com";
}
if($_POST['url'] != "") {
$_FILES['image']['tmp_name'] = "urlprovided";
}
return $data;
}
add_filter("wpcf7_posted_data", "alter_wpcf7_posted_data");
一般一开始两个字段都是空的,如果其中一个有contet另一个得到假数据,使用只需要提供一个。
如果有帮助请告诉我。
我想我在@Aschi33 的代码的帮助下找到了解决方案。
我将图像(上传字段)设置为必填项,而 url 字段不是。所以需要始终选择一个图像。但是使用此代码:
function alter_wpcf7_posted_data( $data ) {
if($_POST['url'] != "") {
$_FILES['image']['tmp_name'] = "urlprovided";
}
return $data;
}
add_filter("wpcf7_posted_data", "alter_wpcf7_posted_data");
如果 URL 字段已填写,则所需的图像字段被伪造以填写,然后 URL 字段可用于提交表单。
然后使用此代码:
function cf7_custom_url_check( $result, $url ) {
if ($result) {
$regex='/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/';
if (!preg_match($regex,$url)) $result=FALSE;
}
return $result;
}
add_filter( 'wpcf7_is_url', 'cf7_custom_url_check', 10, 2 );
我检查它是否是来自 YouTube 的真实视频 link,如果不是,该字段将给出错误。
我在 CF7 中有一个图像上传字段和一个 URL 字段,我怎样才能让用户需要使用这两个字段之一。那么 select 一张图片或在 URL 字段中放置一个 link?
我已经搜索了一下,我看到了一些在普通 txt 字段上执行此操作的选项,但我认为这对我不起作用,因为上传字段。
我不认为 CF7 可以开箱即用。您可能需要深入研究代码才能解决此问题。
因为我不知道你的体型有多大,这也许可以帮助你:
https://wordpress.org/plugins/cf7-conditional-fields/ - CF 7 中条件字段的插件
https://conditional-fields-cf7.bdwm.be/conditional-fields-for-contact-form-7-tutorial/ - 教程如何使用它。
因此,使用此插件,您基本上可以创建一个下拉列表,如果用户想使用图像或使用 URL 字段,则用户首先必须在其中 select。之后,只有他的 selection 会弹出,他可以继续 selected 选项。
如果您想进行编码,可以向站点添加一些 JS,并检查验证是否填写了两个字段之一。
如果插件解决了您的问题 - 太好了,如果不能,请告诉我,我可以帮助您进行代码验证。
###编辑因为我们需要代码###
所以为了动态改变所需的功能,我发现了一个非常好的 post: Dynamically Disable Contact Form 7 Field Validation
一些背景信息: CF7 在服务器端进行验证,因此在这种情况下使用 JS 或 JQuery 无济于事。我们要做的是操纵服务器验证。如果其中一个字段填写正确,我们只是将内容放在另一个字段中进行验证。
我创建了一个如下所示的表单:
CF7 模块中的表单如下所示:
<label> URL
[url* url ]
<label> Image
[file* image ]
[submit "Send"]
然后您只需将以下代码添加到主题的 functions.php 文件中。
function alter_wpcf7_posted_data( $data ) {
if($_FILES['image']['size'] != 0) {
$_POST['url'] = "http://fileupload.com";
}
if($_POST['url'] != "") {
$_FILES['image']['tmp_name'] = "urlprovided";
}
return $data;
}
add_filter("wpcf7_posted_data", "alter_wpcf7_posted_data");
一般一开始两个字段都是空的,如果其中一个有contet另一个得到假数据,使用只需要提供一个。
如果有帮助请告诉我。
我想我在@Aschi33 的代码的帮助下找到了解决方案。
我将图像(上传字段)设置为必填项,而 url 字段不是。所以需要始终选择一个图像。但是使用此代码:
function alter_wpcf7_posted_data( $data ) {
if($_POST['url'] != "") {
$_FILES['image']['tmp_name'] = "urlprovided";
}
return $data;
}
add_filter("wpcf7_posted_data", "alter_wpcf7_posted_data");
如果 URL 字段已填写,则所需的图像字段被伪造以填写,然后 URL 字段可用于提交表单。
然后使用此代码:
function cf7_custom_url_check( $result, $url ) {
if ($result) {
$regex='/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/';
if (!preg_match($regex,$url)) $result=FALSE;
}
return $result;
}
add_filter( 'wpcf7_is_url', 'cf7_custom_url_check', 10, 2 );
我检查它是否是来自 YouTube 的真实视频 link,如果不是,该字段将给出错误。