无法从Contact Form 7 Form

时间:2018-10-18 09:46:18

标签: php wordpress contact-form-7

我的目标是通过联系表格7的POST提交值到重定向的php页面外部,并回显这些值。

问题是,提交后页面重定向后,除非我删除JS并更改表单的操作网址,否则这些值似乎丢失了,最终删除了我需要的所有联系表单7功能(验证,电子邮件)已发送等)。

我尝试了多个插件,例如API的联系表格7,它只能通过我不想要的GET方法工作。我试图获取发布的值并将其转换为会话,但由于我可能做错了事而无法正常工作。

以下是表格: enter image description here

以下是应显示的结果: enter image description here

更新:

好吧,所以我发布了功能来获取发布的数据和结果php文件中缺少的var_dump。

这是fucntions.php

add_action( 'wpcf7_before_send_mail', 'send_post_values' );


  if ($form_id == 7627) {

    $user      = $cf7->posted_data["user"];
    $email = $cf7->posted_data["email"];
    $country  = $cf7->posted_data["country"];

    //any code missing??

  }

}

这是show-values.php

<?php
var_dump($_POST);
print_r($_POST);
echo "Name: " . $_POST["user"] . "<br>"; 
echo "Email: " . $_POST["email"] . "<br>";
echo "Country: " . $_POST["country"] . "<br>";
?>

这是我放在wordpress编辑页面上以进行重定向的JS

document.addEventListener( 'wpcf7mailsent', function( event ) {
    location = 'https://www.xxxxx.xxx/forms/show-values.php';
}, false );

输出仍然丢失: enter image description here

目前不使用cf7以外的任何其他插件。

4 个答案:

答案 0 :(得分:0)

问题是,在浏览器端重定向请求时,您基本上是在启动全新的请求,即GET请求。您可以尝试一些操作:

  1. 将数据作为GET参数传输。最简单,但不是您想要的。
  2. 首次提交后使用Javascript再次提交表单,但这一次是所需的URL。
  3. 提交后保存数据,并在重定向后在正确的页面上检索。基本上,您尝试了会话,但是您说它没有用。您是否使用过session_start()?同样,仅当两个页面都属于同一网页时,它才有效。您还可以尝试将此数据存储在文件/数据库/其他地方,并可能将某种id传递为GET参数,以在重定向后找到该数据。

答案 1 :(得分:-1)

尝试执行此操作,而不是重定向到您的代码:

funtionThatCallsMyHandler() {
    //yourcode
}

将其放在functions.php中,然后在现场调用重定向代码:

funtionThatCallsMyHandler();
redirect
exit

这样,与链接重定向相比,它仍然始终具有发布数据。

答案 2 :(得分:-1)

您可以为此使用Contact Form 7挂钩。

尝试一下:

public function confirmToProceed($warning = 'Application In Production!', $callback = null)
        {
            return true;
        }

查看所有hooks provided by Contact Form 7

更新: 当您更新问题时。对于您的情况,您可以尝试以下操作: 您可以通过查询字符串,网址或创建会话变量来发送值。

将此代码添加到functions.php中

add_action( 'wpcf7_before_send_mail', 'do_your_task' );

function do_your_task($cf7) {
  $form_id = $cf7->id();

  // Do some task only for specific form
  if ($form_id == 123) { // 123 => Your Form ID.

    $email      = $cf7->posted_data["your-email"]; // Update "your-email" to the actual field name you have given in the form
    $first_name = $cf7->posted_data["your-firstname"];
    $last_name  = $cf7->posted_data["your-lastname"];


    //pass data to 3'rd party API

  }

}

现在无需通过js重定向

在您的add_action( 'wpcf7_before_send_mail', 'send_form_data' ); function send_form_data($cf7) { $form_id = $cf7->id(); // Do some task only for specific form if ($form_id == 123) { // 123 => Your Form ID. $posted_data_str = http_build_query( array("data" => $cf7->posted_data ) ); $location = "https://www.xxxxx.xxx/forms/show-values.php?" . $posted_data_str; wp_redirect( $location ); die(); } } 文件中,添加以下代码。

show-values.php

但是,另一种方法是创建一个SESSION变量。

答案 3 :(得分:-1)

这里的另一个答案基本上是正确的,只是假设您知道wordpress的工作原理。有一个名为functions.php的文件,通常在该文件中您要添加任何php代码以完成自己的工作。如何与它交互是两部分的事情,首先您要声明一个像普通的函数:

function what_I_wanna_do {
    // stuff
}

然后,您声明一个触发该函数的触发器:

add_action( 'wpcf7_before_send_mail', 'what_I_wanna_do' );

在该触发器中,联系表单插件允许您挂接到该插件,以便在该插件的核心功能出现之前可以触发一些操作(在这种情况下)。基本上,该行说,在进行联系表单之前,请运行函数“ what_I_wanna_do”。将您想发生的所有事情放在what_I_wanna_do中,然后最后退出\ redirect。您可以在functions.php中声明所有这些内容(或制作自己的插件,以便更轻松地插入和退出代码\ update WP)。