2026年8月8日

2026年8月8日

WordPressのデバッグモード(WP_DEBUG)を有効にしてエラーを確認する方法

WordPressで画面が真っ白になったり、「このサイトで重大なエラーが発生しました」と表示されたりしたとき、原因は多くの場合、PHPのエラーとして記録できます。WordPressのデバッグモードを有効にすると、PHPのエラーや警告、非推奨の関数の呼び出しなどを、画面やログファイルに出せるようになります。

この記事では、wp-config.php での設定方法と、公開中のサイトで訪問者にエラーを見せずにログだけを取る方法を説明します。定数の動きは、2026年10月時点の WordPress のソースコード(wp-includes/default-constants.php と wp-includes/load.php)で確かめています。

デバッグ用の定数

定数 既定値 内容
WP_DEBUG false true でデバッグモードを有効にし、すべての種類のPHPエラーを報告する
WP_DEBUG_LOG false true で wp-content/debug.log に記録する。ファイルのパスを文字列で指定すると、その場所に記録する
WP_DEBUG_DISPLAY true true でエラーを画面に表示する。false で表示しない
SCRIPT_DEBUG false true でWordPress本体のCSSとJavaScriptを圧縮前のファイルで読み込む
SAVEQUERIES 未定義 true で実行したデータベースのクエリを記録する(負荷が増える)

WP_DEBUG_LOG と WP_DEBUG_DISPLAY は、WP_DEBUG が true のときだけ働きます。また、WP_DEBUG_DISPLAY の既定値は true なので、WP_DEBUG だけを true にすると、エラーがそのまま画面に表示されます。

手順1: wp-config.php をバックアップする

wp-config.php は、WordPressをインストールしたディレクトリ(wp-admin や wp-content と同じ階層)にあります。書き間違えるとサイト全体が表示されなくなるので、編集前にコピーを取ります。

cd /var/www/html
cp -p wp-config.php wp-config.php.bak

レンタルサーバーでは、サーバー会社のファイルマネージャーかSFTPでダウンロードしておきます。

手順2: デバッグの設定を書く

wp-config.php には、最初から次の行があります。

define( 'WP_DEBUG', false );

この行を、次の内容に置き換えます。公開中のサイトで原因を調べる場合の設定で、エラーは画面に出さず、ログファイルにだけ記録します。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
  • 書く場所は、/* That's all, stop editing! Happy publishing. */(日本語版では「編集が必要なのはここまでです」で始まる行)より上です。この行より下に書くと、WordPressの読み込みが始まったあとになるため効きません
  • define( 'WP_DEBUG', ... ) を2回書くと、「Constant WP_DEBUG already defined」という警告が出ます。既存の行を書き換えてください
  • @ini_set( 'display_errors', 0 ); は、WordPressが読み込まれる前に起きたエラーも画面に出さないためのものです

開発環境やテスト用のサイトで、エラーを画面で見ながら作業したい場合は、WP_DEBUG_DISPLAY を true にします(または書かずに既定値のままにします)。訪問者がいる公開中のサイトでは、ファイルのパスなどが表示されてしまうので、画面表示は使いません。

WP-CLI で切り替える

WP-CLI が使えるサーバーでは、ファイルを開かずに定数を書き換えられます。--raw は、値を文字列ではなくPHPの値(true / false)として書くための指定です。

wp config set WP_DEBUG true --raw
wp config set WP_DEBUG_LOG true --raw
wp config set WP_DEBUG_DISPLAY false --raw
wp config get WP_DEBUG

wp config set は、定数が無ければ追加し、あれば値を書き換えます。

手順3: エラーを起こしてログを確認する

設定を保存したら、問題が起きる操作(そのページを開く、プラグインを有効化するなど)をもう一度行います。エラーが記録されると、wp-content/debug.log が作られます。

tail -n 50 /var/www/html/wp-content/debug.log

操作しながら新しい行を見たい場合は tail -f を使い、終わったら Ctrl+C で止めます。ログは次のような形式です(例)。

[10-Nov-2026 06:12:31 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function my_func() in /var/www/html/wp-content/themes/mytheme/functions.php:25
[10-Nov-2026 06:12:40 UTC] PHP Warning:  Undefined variable $title in /var/www/html/wp-content/plugins/sample-plugin/sample.php on line 88

見るべきところは、エラーの種類(Fatal error はページが止まる重大なもの、Warning や Deprecated は処理が続くもの)と、ファイルのパスです。パスに plugins/プラグイン名 や themes/テーマ名 が含まれていれば、そのプラグインやテーマが原因の候補になります。

debug.log が作られないとき

原因 確認と対処
エラーがまだ起きていない 問題の操作をもう一度行う。エラーが無ければファイルは作られない
設定が効いていない 「That's all, stop editing!」の行より下に書いていないか、定数の名前の綴りを確認する
PHPが書き込めない wp-content に、PHPを動かしているユーザーの書き込み権限があるか確認する
別の場所に出ている WP_DEBUG_LOG にパスを書いていないか確認する

書き込み権限が無い場合でも、wp-content 以下を chmod -R 755 や chmod -R 777 でまとめて変えるのはやめてください。ファイルに実行権限や書き込み権限が付いてしまいます。次の節のように、ログ専用のディレクトリを作って、そこだけに書き込み権限を与えるのが安全です。

debug.log を外から見られないようにする

既定の wp-content/debug.log は公開ディレクトリの中にあるため、https://example.com/wp-content/debug.log で誰でも開けてしまうことがあります。ログにはサーバー上のパスやプラグイン名、場合によっては入力値が含まれます。次のどちらかで防ぎます。

方法1: 公開ディレクトリの外に記録する

WP_DEBUG_LOG にファイルのパスを書くと、その場所に記録されます。Debian・Ubuntu で、PHPが www-data ユーザーで動いている場合の例です。

sudo mkdir -p /var/log/wordpress
sudo chown www-data:www-data /var/log/wordpress
sudo chmod 750 /var/log/wordpress
define( 'WP_DEBUG_LOG', '/var/log/wordpress/debug.log' );

PHPを動かしているユーザーは環境によって違います(apache、nginx、サーバー会社のアカウント名など)。ps aux | grep -E 'php-fpm|apache2|httpd' などで確認してください。レンタルサーバーでは、ホームディレクトリの中の公開されていない場所を指定します。

方法2: Webサーバーでアクセスを拒否する

Apache 2.4 では、wp-content/.htaccess に次の内容を書きます(ファイルが無ければ作ります)。

<Files "debug.log">
    Require all denied
</Files>

Nginx では、サーバーの設定の server ブロックに次の内容を加え、設定を再読み込みします。

location = /wp-content/debug.log {
    deny all;
}

どちらも、ブラウザか次のコマンドで、403 が返ることを確認します。

curl -I https://example.com/wp-content/debug.log

そのほかのデバッグ設定

SCRIPT_DEBUG

ブロックエディターや管理画面のJavaScriptのエラーを調べるときに、本体のCSSとJavaScriptを圧縮前のファイルで読み込みます。ブラウザの開発者ツールで、エラーの場所が読みやすくなります。

define( 'SCRIPT_DEBUG', true );

SAVEQUERIES

ページの表示中に実行されたデータベースのクエリを、$wpdb->queries に記録します。表示が遅い原因を調べるときに使いますが、記録のぶん負荷が増えるので、調べ終わったら外します。クエリやフックを画面で確認するなら、Query Monitorを使ったWordPressのデバッグ のようにプラグインを使うほうが手軽です。

環境の種類(WP_ENVIRONMENT_TYPE)

WP_ENVIRONMENT_TYPE に local、development、staging、production のどれかを設定できます。WP_DEBUG を書いていない場合、local か development のときは WP_DEBUG が自動で true になります。

define( 'WP_ENVIRONMENT_TYPE', 'development' );

本番サイトの wp-config.php を開発環境からコピーしたときに、この値が残っていないか確認してください。

「重大なエラー」とリカバリーモード

致命的なエラーが起きると、WordPressは真っ白な画面の代わりに「このサイトで重大なエラーが発生しました」と表示し、管理者のメールアドレスにエラーの内容と「リカバリーモード」のリンクを送ります。リカバリーモードでログインすると、原因のプラグインやテーマを止めた状態で管理画面に入れるので、そこで無効化や更新ができます。

メールが届かない場合や、管理画面に入れない場合は、デバッグモードのログでファイルのパスを確認し、SFTPなどで wp-content/plugins の中の該当するプラグインのフォルダー名を変えると、そのプラグインを止められます。白い画面の切り分け方は WordPressの白い画面をデバッグする方法 で詳しく説明しています。

調べ終わったら元に戻す

原因が分かって直したら、デバッグの設定を戻します。

define( 'WP_DEBUG', false );

WP_DEBUG_LOG などの行は削除するか、WP_DEBUG を false にすれば働きません。WP-CLI では wp config set WP_DEBUG false --raw です。ログファイルは使い終わったら削除します。

rm /var/www/html/wp-content/debug.log

WP_DEBUG を true のままにしておくと、ログファイルが大きくなり続け、Deprecated などの記録で負荷もかかります。本番環境での設定の考え方は wp-config.phpのデバッグ設定を本番環境でオフにする重要性と正しい書き方 を参照してください。

まとめ

  • wp-config.php の既存の define( 'WP_DEBUG', false ); を書き換え、「That's all, stop editing!」の行より上に設定を書く
  • 公開中のサイトでは WP_DEBUG_LOG を有効、WP_DEBUG_DISPLAY を false にして、ログにだけ記録する
  • ログは wp-content/debug.log。外から見られないよう、公開ディレクトリの外に出すか、Webサーバーで拒否する
  • 権限は wp-content 全体を変えず、ログの置き場所だけに書き込み権限を与える
  • 調べ終わったら WP_DEBUG を false に戻し、ログを削除する

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲