プラグインを更新したら、サイトに「このサイトで重大なエラーが発生しました。」とだけ表示されるようになった。管理画面を開こうとしても、同じ画面が出て入れない。

こんなとき、WordPressには「リカバリーモード」という逃げ道が用意されています。原因になったプラグインを止めた状態で、管理画面に入れる仕組みです。

ローカルのテストサイトに、わざとエラーを起こすプラグインを入れて、エラーが出てから元に戻すまでを試しました。サイトの表側を何度開いても、リカバリーモードのメールは1通も届きませんでした。届いたのは、管理画面を開いたときです。


WordPressで記事販売ができる「YOMERU」
記事を、そのまま収益に。
WordPressサイトで記事の有料販売ができる
無料のプラグイン「YOMERU」。

リカバリーモードとは

リカバリーモードは、WordPress 5.2で追加された機能です。プラグインやテーマが「致命的なエラー」を起こしてサイトが動かなくなったとき、次のように働きます。

  • サイト管理者のメールアドレスに、エラーの内容と、リカバリーモードに入るためのリンクを送る
  • そのリンクから入った人の画面だけ、原因のプラグインやテーマを一時停止して、管理画面を使えるようにする

一時停止されるのは、メールのリンクを開いてログインしたブラウザの画面だけです。訪問者から見たサイトは、エラーのままです。原因のプラグインを無効化して、はじめてサイトが元に戻ります。

試す準備

今まさにエラーが出ているなら、この節は飛ばして「わざとエラーを起こして試した手順」の2から読んでください。ここでは、テスト用のサイトで同じ状況を作る方法を書きます。

テスト用のWordPressを用意する

本番のサイトでは試さないでください。エラーを起こしている間、サイト全体が表示されなくなります。

試すのは、手元のパソコンに作ったテスト用のWordPressです。今回は「Local」で作ったサイト(WordPress 7.1.3、PHP 8.2)を使いました。Localには、WordPressが送ったメールを受け取って見られる「Mailpit」という機能があります。サイトの画面の「Tools」タブにある「Open Mailpit」から開けるので、リカバリーモードのメールまで確かめられます。

エラーを起こすプラグインを作る

有効にすると、存在しない関数を呼び出して止まるだけのプラグインを作ります。

  1. テスト用サイトのフォルダを開き、「wp-content」→「plugins」の中に「sample-broken-plugin」というフォルダを作ります。Localでは、サイト名の下の「Site folder」を押すとサイトのフォルダが開き、「app」→「public」の中に「wp-content」があります。
  2. メモ帳やテキストエディットなどで新しいファイルを作り、下のコードを貼り付けます。「sample-broken-plugin.php」という名前(文字コードはUTF-8)で、1.のフォルダに保存します。テキストエディットを使うときは、先に「フォーマット」→「標準テキストにする」を選んでおきます。
  3. テスト用サイトの管理画面で「プラグイン」を開くと、「Sample Broken Plugin」が並んでいます。「有効化」を押すと、そこからサイトがエラーになります。有効化のあとに戻ってくる管理画面でもエラーになるので、管理画面から有効化した場合は、この時点でリカバリーモードのメールが送られます。
<?php
/**
 * Plugin Name: Sample Broken Plugin
 * Description: リカバリーモードの検証用。有効化すると致命的エラーを起こす。
 */
add_action( 'init', function () {
	sample_function_that_does_not_exist();
} );

試し終わったら、リカバリーモードの中でこのプラグインを無効化し、「プラグイン」の画面から削除します。

わざとエラーを起こして試した手順

1. サイトに「重大なエラー」が表示される

プラグインを有効にすると、サイトのどのページを開いても、次の画面になりました。

サイトに表示された重大なエラー

Localの初期設定では、この画面の上にエラーの詳しい内容(ファイルの場所など)も表示されます。一般的なレンタルサーバーでは表示されない設定になっているので、ここではそれに合わせて表示を止めて撮っています。

2. 管理画面を開くとメールが送られる

管理画面(/wp-admin/)を開くと、表示が少し変わりました。

管理画面に表示された重大なエラー

「サイト管理者のメール受信箱で手順を確認してください」とあります。この表示は、メールを送ったかどうかに関係なく出ます。

サイトの表側でエラーが出ている間は、メールは送られていませんでした。サイトを開いたあとにLocalのメール受信画面を確かめても、何も届いていません。管理画面を開いて、はじめてメールが届きました。

WordPressのコードを確かめると、リカバリーモードのメールは、管理画面やログイン画面でエラーが起きたときだけ送られる決まりになっています。サイトが壊れたと気づいたら、まず管理画面を開いてみます。

3. メールのリンクを開く

届いたメールです。

リカバリーモードのメール

場所 書かれていること
①件名 「[サイト名] サイトで技術的な問題が発生しています」
②原因 エラーを起こしたプラグインやテーマの名前。メールの下のほうには、エラーが起きたファイルと行番号も書かれている
③リンク リカバリーモードに入るためのリンク。有効期限は1日で、1回しか使えない

ほかに、WordPressのバージョン、有効なテーマ、PHPのバージョンも書かれています。制作会社やサーバー会社に相談するときに必要な情報は、このメールにそろっています。

リンクは1回しか使えません。WordPressの本体のコードでは、開いた時点でリンクが使えなくなり、ログインしなかった場合も同じです。スマホで開いてからパソコンで開き直すと入れないので、作業するパソコンのブラウザで開きます。

4. ログインする

③のリンクを開くと、ログイン画面に「リカバリーモードを初期化しました。ログインして継続してください。」と表示されます(①)。

リカバリーモードのログイン画面

リンクを開いただけでは管理画面に入れません。いつものユーザー名とパスワードでログインします。メールが誰かに見られても、リンクだけでは管理画面に入れないようになっています。

5. 原因のプラグインを無効化する

ログインすると、管理画面がいつもどおり開きました。「プラグイン」の画面には、リカバリーモード中であることの案内(①)と、一時停止されたプラグイン(②)が表示されています。

リカバリーモード中のプラグイン画面

②の下には、エラーの種類、ファイル、行番号が表示されます。原因が分かったら、そのプラグインの「無効化」(③)を押します。

最後に、右上の「リカバリーモードを終了」を押します。サイトを開くと、元どおり表示されました。無効化したプラグインの「再有効化」を押すと、エラーに戻ります。

メールが届かないときは

リカバリーモードのリンクはメールでしか届きません。メールが来ないときは、次の順に確かめます。

管理者メールアドレスを確かめる

メールの送り先は、「設定」→「一般」の「管理者メールアドレス」です。サイトを作ったときの制作会社のアドレスや、もう使っていないアドレスのままになっていないか、普段から見ておきます。

管理者メールアドレスは、変更すると新しいアドレスに確認メールが届き、リンクを押すまで切り替わりません。確認メールが届かずに変えられないときは、こちらの記事の方法が使えます。

リカバリーモードのメールだけ別のアドレスに送りたいときは、wp-config.php に次の1行を足します。

define( 'RECOVERY_MODE_EMAIL', 'you@example.com' );

メールは24時間に1通まで

WordPressの本体のコードでは、リカバリーモードのメールを送ると、そこから24時間は次のメールを送りません。送ろうとしてメールの送信に失敗した場合も、同じように24時間止まります。メールの設定をあとから直しても、すぐには送り直されません。

リカバリーモードを終了すると、この制限は解除されます。

そもそもメールが送れないサイト

WordPressのメールがサーバーの設定で届かないサイトでは、リカバリーモードのメールも届きません。お問い合わせフォームの通知が届かないサイトは、こちらの方法でメールの送り方を変えられます。

メールを使わずに止める

メールがどうしても届かないときは、FTPやサーバーのファイルマネージャーで、wp-content/plugins の中にある原因のプラグインのフォルダ名を変えます(例:sample-broken-plugin を sample-broken-plugin-off に)。WordPressはそのプラグインを見つけられなくなり、無効化された状態になります。直したあとでフォルダ名を戻すと、もう一度「有効化」できます。

テーマが原因のときは、wp-content/themes の中のテーマのフォルダ名を変えると、ほかに入っているテーマに切り替わります。

どのプラグインが原因か分からないときは、デバッグモードでエラーの記録を残すと、ファイルの場所が分かります。

エックスサーバーを使っているなら、サーバーパネルの「WordPressリカバリー」も使えます。

まとめ

今日やっておくことは1つです。「設定」→「一般」の管理者メールアドレスを開き、そのアドレスに届いたメールを、今も読めているかを確かめます。

読めていないアドレスなら、変えておきます。メール自体がサイトから届かないなら、FTPかサーバーのファイルマネージャーに入れるかを、あわせて確かめておきます。

世界最高品質のデザインの
WordPressテーマ集
WordPressテーマ「ISSUE」
WordPressテーマ「ISSUE」
人材不足を解決する求人採用サイトを。
WordPressテーマ「SEEED」
WordPressテーマ「SEEED」
Webサービスを販売するLP型テーマ。
WordPressテーマ「GENESIS」
WordPressテーマ「GENESIS」
スタイリッシュな企業サイトの決定版。
WordPressテーマ「SOLARIS」
WordPressテーマ「SOLARIS」
一流の企業のための一流の企業サイトを。