管理画面内でプラグインの処理が終わったあとページ遷移するリダイレクトをかけたいんですが、実行してみると以下のようなエラーが発生してしまいました。
Warning: Cannot modify header information - headers already sent by (output started at C:\ウェブルート\wordpress\wp-includes\script-loader.php:2121) in C:\ウェブルート\htdocs\wordpress\wp-includes\pluggable.php on line 1427
Warning: Cannot modify header information - headers already sent by (output started at C:\ウェブルート\htdocs\wordpress\wp-includes\script-loader.php:2121) in C:\ウェブルート\htdocs\wordpress\wp-includes\pluggable.php on line 1430
PHPではよくリダイレクト実行する前にテキスト出力などがあるとこの「headers already sent by ~」というエラーが発生します。
いつもの解決としてはその出力する命令文を削除するなりリダイレクト後に処理させたりする工夫すればよいのですが、今回はそのような出力命令文はなし。
リダイレクトの関数はWPが用意しているwp_safe_redirect()を使って実行しています。
WPではリダイレクトに関する問題が意外とネット上で情報が上がっていましたが、よく見かけたのはfunction.phpにadd_actionでリダイレクトの関数をつくって、何かしらのフラグで実行させるというものでした。
ちょっとこの方法は私には理解が難しく、他の方法を調べてみると、別の方法が見つかりました。
それは、プログラムファイルの頭に以下を付けるというもの。
ob_start()
それだけ?
やってみると、なんとエラー発生せずリダイレクト成功しました!
今回はこれだけで済みましたが、ほんとにこれがいいのか、ちゃんとob_start()を勉強する必要がありそうです。
ただ、こんな解決方法もありましたということが知れただけでも儲けもんですね♪