我有一个表单,它将post数据提交给PHP函数search,search函数查询我添加到WordPress数据库的表。提交后,我想重定向到我在仪表板中添加的结果页面。到目前为止,我只能使用Ajax重定向,但我想从PHP文件重定向。
AJAX
$(\'#finderForm\').on(\'submit\', function(e) {
//e.preventDefault();
var form = $(\'#finderForm\').serialize();
$.ajax({
type: "POST",
url: "wp-admin/admin-ajax.php?action=search",
data: form,
success: function (data) {
console.log(\'Submission was successful.\');
console.log(data);
console.log(window.location.href);
//window.location.href = \'?page_id=7=\' + data;
},
error: function (data) {
console.log(\'An error occurred.\');
console.log(data);
},
});
});
我在PHP文件中的搜索函数,我想从这里重定向:
add_action("wp_ajax_search", "search");
function search() {
$name = $_POST[\'name\'];
$mydb = new wpdb(\'root\',\'\',\'i3264185_wp1\',\'localhost\');
$query = "SELECT event_name FROM event WHERE event_name LIKE \'$name%\'";
$result = $mydb->get_results($query);
$result = json_encode($result);
wp_redirect( home_url(\'/?page_id=7\') );
exit;
echo $result;
die();
}
最合适的回答,由SO网友:Johansson 整理而成
不能。如果希望通过PHP重定向用户,则应设置响应头。如果您输出任何数据,您将无法,并且您将得到Header already sent
错误
请看这一行:
wp_redirect( home_url(\'/?page_id=7\') );
exit;
echo $result;
die();
当您使用
exit
(与
die()
), 您正在终止脚本。下一行永远不会执行。因此,我的建议是要么使用AJAX重定向,要么将表单更改为如下所示:
<form action="<?php echo admin_url ( \'admin-ajax.php\' ); ?>">
<!-- This is to set the action of your query args -->
<input type="hidden" name="action" value="search"/>
<!-- Rest of your form here -->
</form>
然后,在
exit
还有AJAX脚本,如果您不依赖它来完成一些重要的事情。