联系表格 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,如果不是,该字段将给出错误。