WordPressでリダイレクト処理を行いたい場合(あんまりない・・・)に、用意されている関数である「wp_redirect()」を使っても「Warning: Cannot modify header information – headers already sent by ・・・」とエラーが出てダメだったので、備忘録を残そうと思います。

実は会員サイトを作るという案件を対応しておりまして、ユーザーの権限レベルなどでスマートにリダイレクトしたい、という箇所がいくつかありました。

検索した割にしっくり来る情報がありませんでしたので書き残して置きたいとおもいます。

フック使って最速で実行しないとダメ

そもそもPHPのリダイレクト処理「header()」って実行前になにか表示処理を行っているタイミングで実行するとエラーになりますよね。

もちろんWordpressでもそれは同じことです。

ですのでリダイレクトを実施するにあたって処理のなかでもいち早く実行されるアクションフックを利用しなければなりません。

「template_redirect」のフックは実行のタイミングが非常に早いために、このアクションフックを利用してリダイレクトするとエラーは出ません。

function.phpに以下を追加しますと、有無を言わさずリダイレクトされます。

例えば、Wordpressのユーザーロール(権限)を元に「ログイン済みならばログインページからマイページに遷移」みたいな処理をしたい場合は、以下みたいに書けば良いと思います。

最初にユーザーロールを取得する関数を用意してログインの有無を確認し、その結果と現在のURLを判定してリダイレクトされる、という仕組みです。

なんかもっとスマートに実装できる気がしていますが、寝ぼけた頭ではこんな程度です。