Php 无法从联系人表单7表单发送Wordpress之外的POST值

Php 无法从联系人表单7表单发送Wordpress之外的POST值,php,wordpress,contact-form-7,Php,Wordpress,Contact Form 7,我的目标是通过发布联系表单7将值提交到重定向的外部php页面,并响应这些值 问题是,当页面在提交后被重定向时,值似乎丢失,除非我删除JS并更改表单的操作Url,最终删除所有需要验证、发送电子邮件等的联系人表单7功能 我尝试了多个插件,比如contact form 7 to API,它只能通过GET方法工作,我不希望这样。我试图获取发布的值并将其转换为会话,但它不起作用,因为我可能做错了什么 以下是表格: 下面是要显示的结果: 更新: 好的,我发布了一个函数来获取发布的数据和结果php文件中缺

我的目标是通过发布联系表单7将值提交到重定向的外部php页面,并响应这些值

问题是,当页面在提交后被重定向时,值似乎丢失,除非我删除JS并更改表单的操作Url,最终删除所有需要验证、发送电子邮件等的联系人表单7功能

我尝试了多个插件,比如contact form 7 to API,它只能通过GET方法工作,我不希望这样。我试图获取发布的值并将其转换为会话,但它不起作用,因为我可能做错了什么

以下是表格:

下面是要显示的结果:

更新:

好的,我发布了一个函数来获取发布的数据和结果php文件中缺少的var_转储

这里是functions.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>";
?>
输出仍然丢失:


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

尝试这样做,而不是重定向到代码:

funtionThatCallsMyHandler() {
    //yourcode
}
将其放在functions.php中,然后在调用重定向代码的地方执行以下操作:

funtionThatCallsMyHandler();
redirect
exit

这样一来,与链接重定向相比,它仍然首先拥有post数据。

您可以使用联系表单7钩子进行此操作

试试这个:

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

  }

}
看到所有的

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

在functions.php中添加此代码

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();
  }
}
现在不需要通过js重定向

在show-values.php文件中添加以下代码

$get_data = $_GET['data'];
if ( !empty($get_data)) {
  var_dump($get_data);

  echo "Name: " . $get_data["your-name"] . "<br>";  // Change "your-name"
}

但是,另一种方法是创建会话变量。

这里的另一个答案基本上是正确的,它只是假设您知道wordpress是如何工作的。有一个名为functions.php的文件,您通常希望在其中添加任何php代码。如何与它交互是一个由两部分组成的事情,首先您声明一个类似于normal的函数:

function what_I_wanna_do {
    // stuff
}
然后声明调用函数的触发器:

add_action( 'wpcf7_before_send_mail', 'what_I_wanna_do' );

在这种情况下,触发联系人表单插件允许您钩住它,这样您就可以在插件核心功能出现之前触发一些东西。基本上这句话是说,在做联系人表单之前,运行我想做的函数。把所有你想做的事情都放在我想做的事情上,然后在最后退出\按你的意愿重定向。您可以在functions.php中声明所有这些内容,或者制作自己的插件,以便更容易地在code\update WP中输入和输出。问题是,当在浏览器端重定向请求时,您基本上是在启动一个全新的请求,该请求将成为GET请求。您可以尝试以下几点:

作为GET参数传输数据。最简单,但不是你想要的。 在第一次提交表单后,使用Javascript再次提交表单,但这次提交到所需的URL。 提交后保存数据,重定向后在正确页面上检索数据。基本上就是你用session试过的,但你说它不起作用。您是否使用会话启动?而且,只有当两个页面都是同一网页的一部分时,它才起作用。您还可以尝试将该数据存储在文件/数据库/其他地方,并可能传递某种id作为GET参数,以便在重定向后查找该数据。
请将您的代码附加到此处。我仅有的代码在结果页中:$\u POST是一个数组,请使用var\u dump$\u POST或print\u r$\u POST打印出$\u POST。回显名称:$_POST[user]还可以。谢谢Mahfuzul,但该数组包含0个元素,因此无法传递POST值…更新了我的Ans,请检查。我忘了提及,它是同一个域和服务器。只是wordpress核心文件夹之外的一个额外文件夹。当你说重定向时,你的意思是你试图通过WP重定向传递post的VAR吗?ie FORM>Redirect>final destination?我正在尝试通过一个在提交后重定向的插件。这就是为什么我尝试了这个会话,因为我确信它不会保存POST值。这是你的问题,GET参数在重定向时似乎会被维护,只保存当前的URI数据,但POST数据不会被传递,除非你使用它们的代码,或者如果它是通过另一个插件的表单提交的,那么它就不会被传递。也就是说,将你想要发生的事情注入到其他插件流中应该很容易,因为wp是如何工作的,而不是试图链接重定向。很抱歉,我对这个问题的知识非常有限,我不理解你所说的丁克代码或编写自定义处理程序是什么意思。php页面上唯一的目标是通过POST或会话只显示值,而不显示其他内容。您指的是哪种自定义处理程序?再次为这个愚蠢的问题感到抱歉..代码将值提取到vars中,但是我如何在另一端回显它呢?我是否转换了那些vars intro$_会话并在另一端响应会话?为了更好地理解我所做的事情,我更新了主要帖子。
add_action( 'wpcf7_before_send_mail', 'what_I_wanna_do' );