我的目标是通过联系表格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以外的任何其他插件。
答案 0 :(得分:0)
问题是,在浏览器端重定向请求时,您基本上是在启动全新的请求,即GET请求。您可以尝试一些操作:
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)。