[WordPress] pluggable.phpで「Cannot modify header information」の警告が出てしまう
- テスト環境で作成したサイトを本番環境にアップしたところ、以下のようなエラーが発生しました
Warning: Cannot modify header information - headers already sent by (output started at /xxx/wp-content/themes/yyy/header.php:1) in /xxx/wp-includes/pluggable.php on line 1281
Warning: Cannot modify header information - headers already sent by (output started at /xxx/wp-content/themes/yyy/header.php:1) in /xxx/wp-includes/pluggable.php on line 1284
発生原因
- 問題の起きたサイトは、ログイン必須の会員制とするため未ログイン時に「auth_redirect」関数を呼ぶようにしていました
<!DOCTYPE html>
<html>
<head>
~
<?php wp_head(); ?>
</head>
<body>
<?php
if (!is_user_logged_in()) {
auth_redirect();
}
?>
</body>
</html>
- 「Cannot modify header information」のワーニングは、headerの出力が終わった後に再度「header」関数を実行されると発生します
- ワーニングの発生箇所であるpluggable.phpの1281行目と1284行目は、それぞれ「header」関数を実行している行でした
pluggable.php on line 1281
header( "X-Redirect-By: $x_redirect_by" );
pluggable.php on line 1284
header( "Location: $location", true, $status );
- 既に「wp_head」関数でheaderが出力されているのに、「auth_redirect」関数で再度headerを出力しようとしたことが原因だったようです
解決方法
- 以下のように「auth_redirect」関数の実行処理を「wp_head」関数の前で行うようにしました
<?php
if (!is_user_logged_in()) {
auth_redirect();
}
?>
<!DOCTYPE html>
<html>
<head>
~
<?php wp_head(); ?>
</head>
<body>
</body>
</html>
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。