検索と呼ばれるPHP関数に投稿データを送信するフォームがあります。検索関数は、私が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();
}
できません。 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スクリプトを削除します。