WordPress 画面が真っ白になる原因とWP_DEBUGでの調べ方

結論

画面が真っ白(White Screen of Death)になるのは、ほとんどの場合 PHP の致命的エラーが起きていて、その表示が隠されている状態です。原因は、プラグイン・テーマのコードの誤り、PHP バージョンとの不整合、メモリ不足のいずれかであることが大半です。

対処の流れは次の通りです。

  1. バックアップを取る(wp-config.php を編集する前に必ず)
  2. wp-config.php で WP_DEBUG と WP_DEBUG_LOG を有効にし、エラーの内容を見る
  3. エラーに出たファイルのパスから、原因のプラグインかテーマを特定する
  4. そのプラグイン/テーマのフォルダ名を変更して無効化する
  5. 直ったら、更新・修正・代替を検討する

原因・仕組み

WordPress 5.2 以降には「リカバリーモード」(致命的エラー保護)があり、致命的エラーが起きると、画面には「このサイトで重大なエラーが発生しました。」(検証環境 7.1.2 の日本語訳。WordPress 5.2 当時の英語の文言は「The site is experiencing technical difficulties.」)というメッセージが出て、管理者宛にメールが届く仕組みがあります。その場合は、メールのリンクからリカバリーモードで入り、原因のプラグインを停止できます。

メールが届かない、または保護が働かない状況(wp-config.php の記述ミス、メモリ不足の途中で落ちた場合など)では、本当に何も表示されない白い画面になります。PHP の設定で display_errors がオフなので、エラーが画面に出ないのです。

公式ドキュメントによると、WP_DEBUG は WordPress の「デバッグモード」を有効にする定数で、WP_DEBUG_LOG を有効にすると、エラーが wp-content/debug.log に保存されます。WP_DEBUG_DISPLAY を false にすると、画面には出さず、ログだけに記録できます。

手順(サンプルコード)

wp-config.php の、/* That's all, stop editing! Happy blogging. */ の直前に書きます。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );      // wp-content/debug.log に保存
define( 'WP_DEBUG_DISPLAY', false ); // 画面には出さない(公開中のサイトの場合)
@ini_set( 'display_errors', 0 );

再度ページを開き、wp-content/debug.log の最後の数行を確認します。典型的な出力は次のような形です。

PHP Fatal error:  Uncaught Error: Call to undefined function my_missing_function() in /…/wp-content/plugins/foo/foo.php:4

パスの plugins/foo/ が原因のプラグインです。管理画面に入れない場合は、FTP などで wp-content/plugins/foo を foo.disabled のように名前変更します。テーマが原因なら wp-content/themes/ の該当フォルダ名を変えると、WordPress が既定のテーマに戻します。

メモリ不足が原因(Allowed memory size of ... bytes exhausted)の場合は、上限を引き上げます。

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

動作確認(検証環境と結果)

WordPress 7.1.2(ja)/PHP 8.2.12 で実行しました(tests フォルダの p8.php、p10.php)。

WP_DEBUG=true
WP_DEBUG_LOG=false
WP_DEBUG_DISPLAY=true
WP_MEMORY_LIMIT='40M'
wp_is_fatal_error_handler_enabled=true
before
PHP Fatal error:  Uncaught Error: Call to undefined function my_missing_function() in ...p10.php:4
  • 検証用スニペットで未定義関数を呼ぶと、Fatal error: Uncaught Error: Call to undefined function が出力され、その後の処理は実行されませんでした。これが、本番で画面が白くなる状態の元になる挙動です。
  • 検証環境の WP_MEMORY_LIMIT は既定の 40M でした。公式ドキュメントも、単一サイトの既定値を40MBとしています。
  • 致命的エラー保護(wp_is_fatal_error_handler_enabled)は有効でした。
  • 本番サーバーでの白い画面の再現、debug.log への実際の書き込み、メール送信は、この CLI 環境では確認していません。

WordPress 画面が真っ白になる原因とWP_DEBUGでの調べ方の注意点

  • 公式ドキュメントは、WP_DEBUG などを公開中のサイトで有効にしないことを推奨しています。使うなら WP_DEBUG_DISPLAY を false にして、調査後は元に戻します。
  • debug.log は URL でアクセスできる場所にあります。使用後は削除するか、アクセスを制限します。
  • 設定を書く位置を間違える(stop editing より後)と、反映されません。
  • 開発環境で画面に直接出したい場合は、WP_DISABLE_FATAL_ERROR_HANDLER で保護機能を無効にできると、公式にあります。
  • PHP のバージョンを上げた直後に白くなったときは、対応していない古いプラグインが原因の可能性が高いです。

WordPress 画面が真っ白になる原因とWP_DEBUGでの調べ方でよくあるミス

  • 記述の最後の閉じ括弧や ; を落として wp-config.php 自体を壊す。
  • すべてのプラグインを一度に停止し、原因が分からなくなる。1つずつ戻して特定します。
  • WP_DEBUG_DISPLAY が true のまま本番で公開し、パス情報を訪問者に見せてしまう。
  • メモリ上限を極端に大きくして問題を隠し、無限ループなどの根本原因を見逃す。

WordPress 画面が真っ白になる原因とWP_DEBUGでの調べ方のチェックリスト

  • [ ] 作業前にファイルとデータベースのバックアップを取った
  • [ ] WP_DEBUG_LOG を有効にし、debug.log を見た
  • [ ] エラーのファイルパスから原因を特定した
  • [ ] 調査後に WP_DEBUG を元に戻した
  • [ ] debug.log を削除または保護した

WordPress 画面が真っ白になる原因とWP_DEBUGでの調べ方のFAQ(よくある質問)

Q. 管理画面だけ白いときは。
A. 管理画面側だけで読み込まれるプラグインが原因のことが多く、メモリ上限(WP_MAX_MEMORY_LIMIT)も疑います。

Q. ログが空のままです。
A. wp-content に書き込み権限が無い、設定の位置が誤っている、PHP の設定でログ出力が止められている、などを確認します。

Q. 原因がテーマのとき、更新を戻せますか。
A. バックアップがあればその版に戻せます。無ければ、該当ファイルの該当行を修正します。

筆者の見解(WordPress 画面が真っ白になる原因とWP_DEBUGでの調べ方)

白い画面は慌てやすい状況ですが、「ログを出す、パスを見る、名前を変える」の3手でかなりの割合を切り分けられると考えています。私見では、更新前にバックアップを取る習慣と、ステージング環境での事前確認が、結局いちばん効果的な予防策です。

WordPress 画面が真っ白になる原因とWP_DEBUGでの調べ方の関連項目

出典(一次情報)

タイトルとURLをコピーしました