【问题标题】:Sending variables from Wordpress Contact Form 7 submission to success page将变量从 Wordpress Contact Form 7 提交发送到成功页面
【发布时间】:2013-06-26 14:56:38
【问题描述】:

我在 Wordpress 3.5 中使用 Contact Form 7。

目前,当用户提交消息时,通过在“其他设置”字段中使用以下内容将他们重定向到成功页面:

on_sent_ok: 'location.replace("http://www.example.org/success-page");'

我希望能够通过使用来自字段的输​​入来自定义成功页面的输出,例如:

on_sent_ok: 'location.replace("http://www.example.org/success-page?name=yourname");'

我希望通过将常用的 Contact Form 7 短代码放入附加设置中,它可能已经发送了字段值,但事实并非如此。

谁能建议我如何将联系表单 7 中的字段值获取到 URL 中,或者作为 $_POST 参数发送?我猜它可能需要一些 javascript 才能做到这一点。

【问题讨论】:

  • Wordpress 似乎不喜欢带有编码查询字符串的 URL,所以这些可能需要作为 $_POST vars

标签: javascript wordpress contact-form-7


【解决方案1】:

这是可能的,但您需要将发布的数据从联系表单保存到会话并在那里显示。

将此添加到您的functions.php

add_action('wpcf7_mail_sent', 'save_cf7_data');


function save_cf7_data($cf) 
{

    if(session_id() == '') {
       session_start();
    }

    $current_submission = WPCF7_Submission::get_instance();

    $_SESSION['cf7_submission'] = $current_submission->get_posted_data();


}

您的成功页面只需要打印会话变量,例如:

echo $_SESSION['cf7_submission']['name'];

就是这样。

【讨论】:

  • 我正在尝试您的解决方案,但它对我不起作用(最新的 WP 和 CF7)。我收到错误消息:注意:未定义变量:_SESSION 并且我有 on_sent_ok:"location = 'form-page/thank-you/';"
【解决方案2】:

另一种选择是使用 jQuery 或 Javascript 并在提交时捕获表单。 捕获表单后,您可以序列化参数并将它们传递到自定义页面以捕获它们并使用它们执行操作。

jQuery 示例:

jQuery(document).ready(function($) {
    $('.wpcf7-form').each(function () {
        $(this).on('submit', function (e) {
            e.preventDefault();

            $.ajax({
                type: 'POST',    // Can also choose GET instead
                url: 'forms/getParams',
                data: $(this).serialize(),
                dataType: "json",
                success: function (data) {
                    $(this)[0].reset();    // Optional in case you want to clear the form on success
                },
                error: function (data, errorThrown) {
                    console.log(errorThrown);
                }
            });

        });
    });
});

【讨论】:

    【解决方案3】:

    “附加设置”代码是 javascript,因此在浏览器的上下文中运行。这意味着您可以使用普通的 javascript 代码轻松访问表单数据

    例如on_sent_ok: 'location.replace("http://www.example.org/success-page?name=" + jQuery("input[name=name]").val());'

    【讨论】:

    • 嗨@danielcavanagh - 不确定如何使用答案的“name=name”部分,例如,如果我的表单字段如下所示:[dynamichidden form-session-id "form_session_id" id:fid] 谢谢 :)
    【解决方案4】:

    我认为你应该使用 $_REQUEST['name'];用于在成功页面上获取您的帖子变量。

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      相关资源
      最近更新 更多