【问题标题】:How to change contact form 7 Redirecting URL dynamically - WordPress如何更改联系表格 7 动态重定向 URL - WordPress
【发布时间】:2013-05-09 04:45:23
【问题描述】:

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

当人们点击下载链接时,会出现一个表格(联系表格 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/';"

【问题讨论】:

    标签: php javascript wordpress wordpress-theming


    【解决方案1】:

    我找到了一种动态更改重定向 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/页面

    享受吧!!!!

    【讨论】:

    • 感谢您分享这个 - 我也在寻找类似的东西。但是有一个问题:是什么阻止了用户直接输入“最终目的地”网址?例如example.com/thankyou_orange - 如何禁止并强制用户填写联系表?
    • 从 CR7 开始,FAQ on redirects on_sent_ok 将于 2017 年被移除,但 redirect 功能仍应适用于同一常见问题解答中提到的新 wpcf7mailsent 事件
    【解决方案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;
        }
    }
    

    【讨论】:

    • 从我的尝试中可以看出,这不起作用,因为 CF7 表单是通过 AJAX 提交的,所以这只是重定向该 AJAX 请求。这意味着 AJAX 永远不会返回响应,CF7 表单更新微调器永远不会停止
    • 如果你turn off the CF7 JavaScript它会工作
    【解决方案3】:

    Contact form 7 在提交 2017 更新后重定向到另一个 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/

    【讨论】:

    • 如果这是真的,这并不能回答重定向到 动态 URL 的概念
    • 您需要更新您的联系表单 7 插件以使用我上面提到的此脚本我在 v7.4.9 上尝试它,然后在任何页面中放置联系表单短代码并将此 JS 脚本放置在任何位置在页面上并在提交后需要重定向动态页面的 JS 中更改 url
    • 如果你阅读了这个问题,提问的人已经可以做到这一点,但他们明确不想改变每一页的表格。他们想使用部分 GET 请求,或者可能是表单中提交的变量。
    【解决方案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 中进行重定向需要一个技巧,那就是你必须turn off the CF7 Javascript as per the doc。把它放在你的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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-23
        • 1970-01-01
        • 2019-04-25
        • 2012-10-12
        • 2018-02-09
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多