如何更改contact form 7动态重定向URL

我正在为我的一个客户建立一个网站, 他们想要在其网站中添加以下功能:
当人们单击下载链接时, 将出现一个表格(联系表格7), 访问者输入了详细信息后, 它将重新定向到下载链接。
提交表单后, 我可以通过对联系表单7进行以下其他设置来重定向到新页面。

on_sent_ok: "location = 'http://example.com/'; "

如何更改contact form 7动态重定向URL

文章图片
但是, 它们有10个文件, 我需要将重定向链接更改10次以触发相应文件的下载。我可以使用10个联系表格来做到这一点, 这将非常肮脏。
有什么方法可以动态更改重定向URL?
例如,
http://example.com/?id=1 http://example.com/?id=2< ?php$id = $_GET['id']; $url= "http://example.com/id=?". $id; ?>

有什么办法可以使用$ url更改以下位置?
on_sent_ok: "location = 'http://example.com/'; "

#1 我找到了一种动态更改重定向URL的方法。我已按照以下步骤实现了动态重定向:
在联系表7的” 其他设置” 中输入以下内容:
on_sent_ok:” redirect(); ”
我们需要一个隐藏的字段来携带必要的信息。但是, 默认情况下, 联系表单7不允许我们创建隐藏字段。开发者SevenSpark开发了一个扩展程序, 以允许在联系表单7中使用隐藏字段。http://wordpress.org/extend/plugins/contact-form-7-dynamic-text-extension/请下载插件并安装。你将看到为联系表单7生成了两个新标签。这将使你能够从$ _GET变量中获取值。请检查插件页面上的详细信息。
例如http://example.com/?foo=” bar”
创建模板页面或退出页面模板。
将模板分配给适当的页面。如果要使用默认模板, 则无需创建或分配任何模板。
在编辑器中打开模板文件。
粘贴以下代码:
< script> function redirect() {// your hidden field ID var filename = document.getElementById('redFilename').value; var url =''; //alert(document.getElementById('redFilename').value); if (filename == 'apple') {url= 'http://example.com/thankyou/'; } else if (filename == 'orange') { url= 'http://example.com/thankyou_orange/'; } window.location = url; } < /script>

现在浏览带有GET参数的链接。
例如http://example.com/?redFilename=” apple”
联系人表单7的隐藏字段将捕获redFilename值。如果表单提交成功, 它将重定向到http://example.com/thankyou_orange/页面
请享用!!!!
#2
add_action('wpcf7_mail_sent', 'ip_wpcf7_mail_sent'); function ip_wpcf7_mail_sent($wpcf7) { $on_sent_ok = $wpcf7-> additional_setting('ip_on_sent_ok', false); if (is_array($on_sent_ok) & & count($on_sent_ok) > 0) { wp_redirect(trim($on_sent_ok[0])); exit; } }

#3 提交2017年更新后的联系表7重定向到另一个URL
首先, 你需要在新版本上更新联系表单7, 然后在v7.4.9上进行尝试, 然后将联系表单短代码放置在任何页面中, 并将此JS脚本放置在页面中的任何位置, 并在提交后更改需要重定向页面的URL
< script> document.addEventListener( 'wpcf7mailsent', function( event ) { location = 'http://example.com/'; }, false ); < /script>

有关更多信息, 请单击联系表7官方网站https://contactform7.com/redirecting-to-another-url-after-submissions/
#4 on_sent_ok:从来没有为我工作。
我尝试了类似这样的方法来跟踪对话。
var sent = $('#wpcf7-f3224-o1').find('.wpcf7-mail-sent-ok'); if ( sent.length ) { < ?php $page_name = get_the_title(); $the_name = str_replace(' ', '', $page_name); ?> self.location="/merci/?page=< ?php echo $the_name ?> "; };

#5 我采用了Javascript路线, 该路线可行… 但是你随后无法访问所提交的变量(至少我看不到你的想法)。在这里, 我已经将我的Javascript代码移植到了PHP代码中。
你可以访问表单中任何隐藏或显示的输入, 并使用它们来构建URL。
使用PHP而不是Javascript进行重定向有一个必要的技巧, 那就是你必须根据文档关闭CF7 Javascript。将其放在你的wp-config.php中:
define('WPCF7_LOAD_JS', false);

【如何更改contact form 7动态重定向URL】然后, 你可以将其放在主题functions.php中:
add_action( 'wpcf7_mail_sent', 'icc97_so_mail_sent', 10, 3); /** * Ported Javascript code to redirect the CF7 form * * Have to do it in PHP because we want access to the POSTed data * * There is a further complication that the default CF7 submission is AJAX * Then our WP redirect doesn't do anything * So we have to turn off the CF7 Javascript via wp-config.php * */ function icc97_so_mail_sent( $contact_form ) { $submission = WPCF7_Submission::get_instance(); $data = $submission-> get_posted_data(); // example data: // {"_wpcf7":"11684", "_wpcf7_version":"4.9", "_wpcf7_locale":"en_GB", "_wpcf7_unit_tag":"wpcf7-f11684-p11681-o1", "_wpcf7_container_post":"11681", "your-name":"Ian", "your-organisation":"Stack Overflow", "your-email":"ian@example.com", "your-agreement":"1"}/** * Get an attribute value from the CF7 form * * @paramstring $name attribute name * @return stringattribute value */ $attr = function($name) use ($data) { $val = $data[$name]; // Dropdown / select values are arrays could be a one element array return is_array($val) ? $val[0] : $val; }; /** * Create URL for downloads page * * @paramstring $domain e.g. https://example.com, can be blank for relative * @paramarray$namesattributes * @return stringURL e.g. https://example.com/downloads/x/x/x/?data=http://www.srcmini.com/xxx */ $buildUrl = function ($domain, $names) use ($attr) { $stub = [$domain,'downloads']; // we want lower case, attributes $path = array_map('strtolower', array_map($attr, $names)); // create an array of the full URL and then join with '/' return join('/', array_merge($stub, $path)); }; $domain = ''; // this requires AJAX to be turned off - see function doc block \wp_redirect($buildUrl($domain, ['your-name', 'your-organisation'])); // exit otherwise CF7 forces it's own redirect back to the original page exit; }

    推荐阅读