WordPressで「Warning」「Deprecated」と出る原因と対処法|表示を消すには
直らないときは、無料でご相談いただけます(直らなければ料金はいただきません)。
結論:画面に出る「Warning:」「Deprecated:」「Notice:」は、PHP(WordPressを動かしているプログラムの言葉)からの注意の表示です。「Fatal error」と違い、その知らせだけで処理が止まるものではありません。ただ、その処理がうまく動いていないことや、推奨されなくなった書き方を使っていることを知らせています。
対処は2段階です。①サイトを見ている人に表示しない設定にする。②表示の中のファイルの場所を手がかりに、どのプラグイン・テーマかを見つけて更新するなど、原因を直す。PHPの版を上げた後に出始めることがあります。
目次
出る画面
ページの上のほうや、記事の途中、管理画面の上に、次のような英語の文が出ます。ファイルの場所や行の番号は、サイトによって変わります。
Warning: Undefined array key "title" in /home/…/wp-content/plugins/○○/○○.php on line 120
→ 用意されていない項目(ここでは「title」)を読もうとしたWarning: Undefined variable $post in /home/…/wp-content/themes/○○/functions.php on line 45
→ 値の入っていない変数(ここでは「$post」)を使おうとしたWarning: foreach() argument must be of type array|object, null given in …
→ 一覧として扱うはずのところに、空の値が渡されたDeprecated: Creation of dynamic property ○○::$○○ is deprecated in …
→ あらかじめ決められていない項目を、あとから作っている(PHP 8.2 から推奨されない書き方)Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in …
→ 文字を受け取るはずのところに、空の値(null)を渡している(PHP 8.1 から推奨されない書き方)Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。…
→ WordPressが出す日本語の注意。プラグインやテーマが、翻訳を早すぎるタイミングで読み込んでいる
「Fatal error」と出ている場合や、「このサイトで重大なエラーが発生しました。」と出る場合は、処理が止まっています。重大なエラーの記事をご覧ください。
表示の読み方
| 部分 | 意味 |
|---|---|
| 最初の「Warning」「Deprecated」「Notice」 | 注意の種類。「Warning」は処理の中で困ったことが起きた、「Deprecated」は推奨されなくなった書き方を使っていて、先の版で使えなくなる可能性がある、「Notice」はそれより軽い知らせ |
| そのあとの英語の文 | 何が起きたか(例:「Undefined array key」は、無い項目を読もうとした) |
| 「in」のあとのファイルの場所 | どのファイルで起きたか。wp-content/plugins/ の次の名前がプラグインの、wp-content/themes/ の次の名前がテーマのフォルダの名前です。管理画面に出る名前とは違うことがあります |
| 「on line」のあとの数字 | そのファイルの何行目か |
ファイルの場所は、原因を調べる手がかりです。原因と決まるわけではありません。場所が wp-includes や wp-admin(WordPress本体)のときや、見覚えのない名前のときは、そこを呼び出したプラグインやテーマが原因のこともあります。その場合は、下の3へ進むか、ご相談ください。
なぜ出るのか
- PHPの版を上げた:PHPは版が上がると、同じ書き方の扱いが変わることがあります。PHP 8.0 では、無い項目や変数を読んだときの知らせが「Notice」から「Warning」になりました。8.1 では、一部の組み込みの関数で、null(空の値)を受け取らないところに null を渡すこと、8.2 では、例外を除き、決められていない項目(dynamic property)を作ることが「Deprecated」になりました。古いプラグインやテーマは、こうした書き方が残っていることがあります(PHPの版を上げる記事)。
- WordPressやプラグインを更新した:組み合わせによって、新しい知らせが出ることがあります。
- 表示する設定になっている:WordPressの
wp-config.phpのWP_DEBUGがtrueになっている、または、サーバーのPHPの設定でエラーを画面に出すようになっていると、ふだんは出ない知らせが画面に出ます。
WordPress 7.1 では、WP_DEBUG が false(標準)のとき、「Deprecated」と「Notice」は知らせの対象から外れます。「Warning」は対象のままなので、サーバーの設定によっては画面に出ます。「Deprecated」が見えている場合は、WP_DEBUG が true になっていることが考えられます。
作業の前に確かめること
- 出ている文を控える:文の全体を、ファイルの場所と行の番号も含めて書き写すか、画面を保存します。ファイルの場所にはサーバーのフォルダの名前が含まれるため、だれでも見られる掲示板などには貼らず、相談先にだけ送ります。
- いつから・直前の作業:PHPの版の変更、WordPressやプラグインの更新、テーマのファイルの編集などをしていないかを思い出しておきます。
- バックアップ:
wp-config.phpを直す・プラグインを更新する前に、ファイルとデータベースのバックアップを確かめます(更新の前に確かめること)。wp-config.phpは、直す前のファイルをパソコンに保存し、うまくいかなかったときにそのファイルを戻せることを確かめてから直します。
直し方
1. Warning・Deprecated をサイトの画面に表示しない
知らせがサイトの画面に出ていると、見た目がくずれるうえ、サーバーのフォルダの場所も見えてしまいます。まず、表示しない設定にします。
wp-config.phpを確かめる:define( 'WP_DEBUG', true );となっていれば、調べ終わっているかを確かめてからfalseにします。だれがなぜ入れたか分からない場合は、サイトを作った会社などに確かめます。'false'と引用符で囲まない:公式の案内にあるとおり、'false'のように引用符で囲むと、文字として扱われ、trueと同じ意味になります。WP_DEBUGがfalseでも「Warning」が出るとき:サーバーのPHPの設定で、エラーを画面に出す(display_errors)ようになっていることがあります。サーバー会社の管理画面のPHPの設定を見るか、サーバー会社に確かめます。
表示しない設定は、知らせを見えなくするものです。表示が消えても、原因が直ったとは限らないため、次の2・3も進めます。
調べるために、画面に出さずに記録だけ残したいときは、上とは別の、調べるための設定です。WordPressの公式の案内では、WP_DEBUG を true にしたうえで、WP_DEBUG_LOG を true、WP_DEBUG_DISPLAY を false にすると、画面には出さずに wp-content/debug.log へ記録できます。公式の案内では、公開しているサイトでこうした道具を使うことはすすめられていません。このファイルは外から見られることがあるため、公開中のサイトで調べるときは相談先と進め、調べ終わったら設定を外し、ファイルも消します。
サイトヘルスに「サイト訪問者へエラー表示を行う設定になっています」と出ている場合も、この設定が関係しています(サイトヘルスの記事の「安全・設定」)。
2. 出ているプラグイン・テーマを更新する
ファイルの場所から分かったプラグインやテーマに、新しい版が出ていないかを確かめ、バックアップを取ってから更新します(安全に更新する手順の記事)。新しい版で、PHPの新しい版に合わせた直しが入っていることがあります。
3. 更新しても直らない・直ったか分からないとき
先に表示しない設定にした場合は、画面を見ても、知らせが消えたかは分かりません。知らせが出ていた画面の機能がふだんどおり動くかを確かめ、必要なら、相談先に記録で確かめてもらいます。
- プラグインやテーマの作者のサポートに、出ている文の全体と、PHPとWordPressの版を添えて問い合わせます。だれでも見られる掲示板で問い合わせるときは、サーバーのフォルダの名前などを伏せて書き、必要なら、公開されない窓口で伝えます。
- 長く更新されていないプラグインなら、同じ働きをする、更新の続いているプラグインへの入れ替えも考えます。
- プラグインやテーマのファイルを直接書き換えると、次の更新で元に戻ります。自分で作ったテーマや、子テーマのファイルで出ている場合は、作った方に直してもらいます。
4. PHPの版を上げた直後に出始めたとき
多くの知らせが一度に出て、サイトの動きにも困っている場合は、PHPの版を元に戻して、先にプラグインやテーマを更新する方法もあります(PHPの版を上げる記事の「不具合が出たとき」)。古い版のPHPは、セキュリティの修正が受けられないことがあるため、戻すのは一時的にとどめます(php2shell の記事)。
知らせのあとに「Cannot modify header information – headers already sent」と出ている場合は、先に出た知らせが原因のことがあります。先に出ている知らせから直します(headers already sent の記事の「先に別の警告が出ているとき」)。
直った後に確かめること
- ログアウトした状態で、トップページや記事に、知らせの文が出ていないか
- 知らせが出ていた画面の機能(フォームの送信、一覧の表示など)が、ふだんどおり動くか
- 調べるための設定(
WP_DEBUG_LOGなど)を外し、画面に表示しない設定になっているか。debug.logを作った場合は、消したか
自分で進めるのが難しいとき
次のような場合は、無理に作業を進めず、ご相談ください。
- どのプラグインやテーマが原因か分からない
wp-config.phpやサーバーの設定を触ってよいか判断がつかない- 更新しても消えない、作者のサポートが続いていない
- PHPの版を上げた後から、いくつも知らせが出ている
WP-ingでは、WordPressの不具合の修理を承っています。状況を確かめて、作業の前に料金をご案内します。直らなければ料金はいただきません。お支払いは、直ったことを確かめていただいてからです。
よくある質問
「Deprecated」は、そのままにしておいても大丈夫ですか?
「Deprecated」は、その機能が今こわれているという意味ではなく、今はそのまま動いていることもあります。ただ、推奨されなくなった書き方の知らせなので、PHPの先の版では動かなくなる可能性があります。表示しない設定にしたうえで、更新や入れ替えの予定を立てておくと安心です。
管理画面にだけ出ています。サイトを見ている人にも出ていますか?
ログインしていない別のブラウザなどで、知らせが出たページを開き、同じ操作をして確かめます。出ていなければ、確かめたページと操作では、見ている人に出ていないと考えられます。管理画面にだけ出る知らせも、そのプラグインの機能がうまく動いていない手がかりになるため、更新や問い合わせを進めます。