无法从 Contact Form 7 表单向 Wordpress 外部发送 POST 值

Can't send POST values outside of Wordpress from Contact Form 7 Form

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

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

我尝试了多个插件,例如 contact form 7 to API,它只能通过我不想要的 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??

  }

}

这是表演-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 没有使用任何额外的插件。

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

funtionThatCallsMyHandler() {
    //yourcode
}

将其放入 functions.php 然后在您调用重定向代码的位置执行:

funtionThatCallsMyHandler();
redirect
exit

这样它仍然首先有 post 数据,而不是链接重定向。

您可以为此使用 Contact Form 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

  }

}

查看全部hooks provided by Contact Form 7

更新: 当您更新问题时。对于你的情况,你可以试试这个: 您可以通过 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"
}

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

这里的另一个答案基本上是正确的,它只是假设你知道wordpress是如何工作的。有一个名为 functions.php 的文件,通常是您要将任何 php 代码添加到 w\e 您正在做的事情的地方。如何与之交互分为两部分,首先你声明一个正常的函数:

function what_I_wanna_do {
    // stuff
}

然后声明一个调用函数的触发器:

add_action( 'wpcf7_before_send_mail', 'what_I_wanna_do' );

在那个触发器中,联系表单插件允许你挂钩它,这样你就可以触发一些东西,在这种情况下,在插件核心功能发生之前。基本上那行说,在做联系表格之前,运行 函数 "what_I_wanna_do"。把你想要发生的所有事情都放在 what_I_wanna_do 中,然后放在 exit\redirect 中。你可以在 functions.php 中声明所有这些东西(或者制作你自己的插件,这样更容易进入和退出 code\update WP)。

问题是,当在浏览器端重定向请求时,您基本上是在开始全新的请求,即 GET 请求。您可以尝试的一些事情:

  1. 以 GET 参数传输数据。最简单但不是你想要的。
  2. 第一次提交后使用 Javascript 再次提交表单,但这次需要 URL。
  3. 提交后保存数据,并在重定向后在正确的页面上检索数据。基本上你用会话尝试了什么,但你说它没有用。你用过session_start()吗?此外,它仅在两个页面都是同一网页的一部分时才有效。您还可以尝试将此数据存储在 file/database/somewhere else 中,并可能将某种 id 作为 GET 参数传递以在重定向后查找该数据。