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