サポート » 使い方全般 » wp_redirectを記事途中で強制的に実行する方法

  • the_contentの中で「wp_redirect()」を使用すると、「headers already sent by」エラーが出ます。
    Warning: Cannot modify header information – headers already sent by (output started at /path/wp-admin/admin-header.php:8) in /path/wp-admin/post.php on line 569
    いわゆる、header関数の前にechoがあることが原因だと思いますが、原因となる「output started at」が無数にあるため、「output started at」のファイルを一つずつ修正することは不可能です。
    どうしてもsingle.phpの中で「wp_redirect()」を実行したい場合、どのような記述をすべきでしょうか?
    ※直前にheader_remove()をしてみましたが効果がありませんでした。JSのリダイレクトではなく、あくまでPHPにてリダイレクトをしたいです。

    • このトピックはrealmccoyzzが6年、 5ヶ月前に変更しました。
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • こんにちは

    single.phpの中でwp_redirectを使うことは不可能です。

    initアクションフックの中など、WordPressがHTMLコンテンツをブラウザに返す前に実行する必要があります。

    http://php.net/manual/ja/function.header.php

    覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。

    phpはセッションデータをパラメータとして取り込むことができるのでページ内容が形成された後ではむつかしいと思います。
    仮にデータの形成された後でリダイレクトできると、押してもいない同意を押した結果として送信できる可能性もあります。

    • この返信は6年、 5ヶ月前にmsioが編集しました。理由: すいませんJSは不要だったのですね。

    こんにちは、

    具体的にどんなことをしたいのでしょうか?

    察するに本文データが現在の条件で出来上がった時点でその内容により動作をきめて場合によりリダイレクトすることを趣旨としてさせたいのではないかなと思っております。
    すると表示用のデータが形成できた時点でリダイレクトを含めた動作であればやはりJavascriptではないかなと思います。
    以外であればコンテントが出来上がるのをヘッダー生成時より前にもってくるかフィルタで一旦コンテンツの内容を確認して、まずヘッダーの動作をきめた後表示その他の動作を作成することになるのではと思います。
    条件内容によると思いますが、本文の条件がどうなればリダイレクトになるべきか予定をお話いただけると解決の方法が見つかるかもしれません。
    私はワードプレスの関数やフックについてあまり得意ではないのでお手伝いできるとこは少ないかもしれません。

    トピック投稿者 realmccoyzz

    (@realmccoyzz)

    ありがとうございます。まさにおっしゃる通りで。

    やはりinitフックで実行する他無いようです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「wp_redirectを記事途中で強制的に実行する方法」には新たに返信することはできません。