2

我正在为我的一个客户建立一个网站,他们希望在他们的网站中加入如下功能:

当人们点击下载链接时,会出现一个表格(联系表格7),访问者输入他们的详细信息后,它会重定向到下载链接。

提交表单后,我可以通过对联系表单 7 使用以下附加设置来重定向到新页面。

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

在此处输入图像描述

但是,他们有 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/';"
4

5 回答 5

9

我找到了一种动态更改重定向 URL 的方法。我已按照以下步骤实现动态重定向:

  1. 在联系表格 7 的附加设置中输入以下内容:

    on_sent_ok: 'redirect();'

  2. 我们需要一个隐藏字段来携带一条必要的信息。但是,默认情况下,Contact form 7 不允许我们创建隐藏字段。开发者 SevenSpark 开发了一个扩展,允许在 Contact form 7 中隐藏字段。 http://wordpress.org/extend/plugins/contact-form-7-dynamic-text-extension/ 请下载插件并安装。您将看到为联系表单 7 生成了两个新标签。这将允许您从 $_GET 变量中获取值。请检查插件页面上的详细信息。

    前任。http://example.com/?foo= "酒吧"

  3. 创建模板页面或退出页面模板 ok。

  4. 将模板分配到相应的页面。如果您想使用默认模板,则无需创建或分配任何模板。

  5. 在编辑器中打开您的模板文件。

  6. 粘贴以下代码:

    <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>
    
  7. 现在浏览带有 GET 参数的链接。

    前任。http://example.com/?redFilename= “苹果”

联系表单 7 的隐藏字段将捕获 redFilename 值。如果表单提交成功,它将重定向到http://example.com/thankyou_orange/页面

享受!!!!

于 2013-05-15T06:58:48.703 回答
3
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;
    }
}
于 2014-05-06T07:06:58.957 回答
0

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 ?>";
   };
于 2014-05-19T09:37:22.813 回答
0

联系表格 7 提交后重定向到另一个 URL 2017 更新

首先,您需要在新版本上更新联系表格 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/

于 2017-08-24T07:51:14.340 回答
0

我沿着 Javascript 路线走下去,它可以工作......但是你无法访问提交的变量(至少我看不出你会怎么做)。在这里,我将我的 Javascript 代码移植到 PHP 代码中。

您可以访问表单中任何隐藏或显示的输入,并使用它们来构建 URL。

在 PHP 而不是 Javascript 中进行重定向需要一个技巧,那就是您必须按照 doc 关闭 CF7 Javascript。把它放在你的wp-config.php

define('WPCF7_LOAD_JS', false); 

然后你可以把它放在你的主题中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
     *
     * @param  string $name attribute name
     * @return string       attribute 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
     *
     * @param  string $domain e.g. https://example.com, can be blank for relative
     * @param  array  $names  attributes
     * @return string         URL e.g. https://example.com/downloads/x/x/x/?data=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;
}
于 2017-09-13T19:38:08.917 回答