web-dev-qa-db-ja.com

送信後にページにリジットレクト

検索と呼ばれる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();
   }
2
Jeann Pierre

できません。 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スクリプトを削除します。

3
Jack Johansson