タグアーカイブ デバッグ

WordPress 7.1でサイトエディターが真っ白になる原因と直し方

WordPress 7.1に更新した後、サイトエディター(wp-admin/site-editor.php)だけが真っ白になる場合は、ブラウザの互換性とJavaScriptエラーを最初に確認し、それでも解決しなければサーバーエラーログとREST APIの応答を調べる。サイトエディターは投稿編集画面と比べてJavaScriptとREST APIへの依存度が高く、原因はこの2系統に集中している。

なぜサイトエディターだけが真っ白になるのか

なぜサイトエディターだけが真っ白になるのか

サイトエディターは、テンプレートやテンプレートパーツ、グローバルスタイルと呼ばれるデザイン設定を、REST API経由でサーバーから取得してJavaScriptで描画する。投稿編集画面が正常でも、サイトエディターだけが真っ白になるのは、この特殊な描画経路のどこかでエラーが起きているためだ。

主な原因は次の4つに分けられる。

  • 古いブラウザが最新JavaScript機能に対応していない
  • JavaScriptファイルの読み込み失敗や例外が起きている
  • REST APIが内部エラーを返してテンプレート情報を取得できない
  • PHPのメモリ不足で致命的エラーが発生している
STEP 1 別のブラウザと端末で開いて確認する
STEP 2 デベロッパーツールでJavaScriptエラーを確認する
STEP 3 サーバーエラーログを直後の時刻で確認する
STEP 4 REST APIの応答を直接チェックする

真っ白な画面の原因切り分けは、この4ステップの順で行うと効率的だ。

古いブラウザが原因かどうかを確認する手順

古いブラウザが原因かどうかを確認する手順

最初に確認するのはブラウザの互換性だ。サイトエディターはブロックエディターと同じく、最新のJavaScript機能をフルに使って動作する。Firefox ESRや数世代前のSafari、旧バージョンのChromeでは、これらの機能に対応できずに画面全体が真っ白になることがある。特に長期的にブラウザをアップデートしていない業務用端末や古いノートPCで起こりやすい。

確認方法はシンプルで、同じサイトを別の端末や別のブラウザで開いてみる。もし最新版のChrome、Edge、Firefoxのいずれかで正常に表示されるなら、使用中のブラウザが古いことが原因だ。その場合はブラウザのアップデートを行うか、対応ブラウザに切り替える。どうしても古いブラウザで作業しなければならない場合は、サイトエディターの使用を避け、投稿編集画面から個別のテンプレートを編集するという回避策もある。

デベロッパーツールでJavaScriptエラーを確認する

デベロッパーツールでJavaScriptエラーを確認する

最新ブラウザでも真っ白になる場合は、デベロッパーツール(開発者ツール)を開いてJavaScriptエラーを調べる。画面が真っ白になる症状の多くは、レンダリングを途中で止めるJavaScriptの例外や、重要なファイルの読み込み失敗が直接の原因になっている。

ChromeやEdgeではF12キー、MacではCommand+Option+Iキーでデベロッパーツールが開く。Firefoxでは右クリックから「要素を調査」を選ぶとよい。開いたら「コンソール」タブに切り替え、ページを再読み込みする。コンソールに赤い文字で表示されるエラーを上から順に確認する。

TypeErrorやReferenceError、SyntaxErrorの表示があれば、それが画面描画を止めている例外だ。また「Failed to load resource」のようなエラーは、必要なJavaScriptファイルが読み込めていないことを示す。この場合は更新時にファイルが欠損した可能性が高いため、後述するWordPress本体の再インストールで解決することが多い。

サーバーエラーログとREST APIを確認する

サーバーエラーログとREST APIを確認する

ブラウザ側に明確なJavaScriptエラーが見つからない場合、次にサーバー側の状態を確認する。サイトエディターはREST API経由でテンプレート情報を取得するため、サーバーでエラーが発生していても画面上には何も表示されず、真っ白なままになる。

サーバーのエラーログを確認するときは、サイトエディターを開いた直後の時刻に注目する。エラーログには過去のボットスキャンや他のリクエストも大量に記録されている。AH01276のようなDirectoryIndex関連のエラーは、多くの場合ボットがディレクトリを直接スキャンした痕跡であり、エディターの真っ白とは無関係だ。ログを上から眺めるのではなく、症状が起きた時刻に新しいエントリが追加されたかどうかを確認する。

サーバーログと並行して、REST APIが正しく応答するかを直接チェックする。ブラウザのアドレスバーに自分のサイトURLに続けて wp-json/wp/v2/templates と入力して開いてみる。正常ならテンプレート一覧の入ったJSONデータが表示される。ここでエラーページやHTTP 500系のエラーが返るなら、REST API側に問題がある。

PHPメモリ上限と再インストールで直す

PHPメモリ上限と再インストールで直す

確認した内容に応じて対処する。PHPのメモリ不足を示すエラー(Allowed memory size of から始まるFatal error)がログに記録されている場合は、メモリ上限を引き上げる。デフォルトの128Mでは、テンプレートの多いサイトや高機能テーマでサイトエディターの読み込み中に不足することがある。wp-config.phpに次の1行を追加するか、レンタルサーバーの管理画面からメモリ上限を変更する。

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

エラーログにメモリ不足が出ていない場合や、ブラウザのコンソールにファイル読み込みエラーが出ている場合は、WordPress本体の再インストールが有効だ。ダッシュボードの「更新」メニューを開き、「WordPressを再インストールする」ボタンを押す。wp-admin、wp-includes、ルートのコアファイルが最新版で上書きされ、更新時に欠損したファイルが復元される。テーマやプラグイン、投稿データには影響しない。

再インストール後も症状が続く場合は、一度標準テーマ(Twenty Twenty-Fiveなど)に切り替えてサイトエディターが開くか確認する。標準テーマで開くなら使用中のテーマ側に原因があり、標準テーマでも開かないならサーバー設定やREST APIの応答に原因が残っている可能性が高い。

よくある質問

プラグインをすべて無効化しても直らないのはなぜか

サイトエディターの真っ白はプラグインの競合だけでなく、ブラウザ、JavaScript、REST API、PHPメモリなど複数の要因が絡む。特にREST API経由のデータ取得に失敗している場合はプラグイン無効化だけでは切り分けが不十分だ。ブラウザのコンソールとサーバーログの両方を確認する必要がある。

同じブラウザなのにサイトによって動作が違うのはなぜか

サイトごとに使用中のテンプレートやブロック、グローバルスタイルの構成が異なる。古いブラウザが対応していないJavaScript機能を使うブロックや設定が含まれているサイトだけが真っ白になる。また、サイトごとのメモリ上限やサーバー設定の違いも影響する。

WordPress 7.0に戻した方がよいか

セキュリティ修正を含む更新を戻すのは推奨しない。WordPress 7.1のまま原因を特定して解決する方が安全だ。原因を切り分ける手順を踏めば、ロールバックせずに直せるケースがほとんど。

デベロッパーツールが使えない端末ではどうすればいいか

別の端末やブラウザで同じサイトを開いて症状を再現し、そこからデベロッパーツールやサーバーログを確認する。どうしても別端末が用意できない場合は、サーバーエラーログを症状発生直後の時刻で確認し、PHPの致命的エラーやREST APIの応答を調べるとよい。

この記事のポイント

  • サイトエディターの真っ白はブラウザ互換性を最初に疑う
  • デベロッパーツールでJavaScriptエラーを特定する
  • サーバーエラーログは症状が起きた直後の時刻で確認する
  • REST APIの応答を直接チェックして切り分ける
  • PHPメモリ不足なら上限を引き上げる
  • ファイル欠損が疑わしい場合はWordPress本体を再インストールする
WP-Stagingサイトが重大なエラーで表示されない原因と直し方

WP-Stagingサイトが重大なエラーで表示されない原因と直し方

WP-Stagingの複製サイトにアクセスすると「このサイトで重大なエラーが発生しました」と表示され、デバッグログに call_user_func_array の TypeError が記録される場合、PHP 8系ではコアファイルの欠落や混在が致命的エラーへ変わる。PHP 7.4系へ一時的に切り替えて管理画面へ入り、WordPressコアの再インストールとプラグイン更新を行えば根本から直る。

WP-Stagingサイトが重大なエラーになる原因

WP-Stagingサイトが重大なエラーになる原因

デバッグログの最終行には call_user_func_array() が「Argument #1 ($callback) must be a valid callback」という趣旨の TypeError を投げ、_wp_register_default_icon_collections という関数が見つからないことが記録される。この関数は WordPress 本体の wp-includes/theme.php で定義されるもので、本来は必ず存在しているはずだ。

WP-Staging はライブサイトのファイルとデータベースをコピーしてステージングサイトを作る。このとき wp-includes 内のファイルが不完全にコピーされていたり、旧バージョンのコアファイルと新バージョンが混在したりすると、関数が未定義のまま WordPress の読み込み処理が進み、このエラーが発生する。

PHP 8.0 以降は call_user_func_array() に存在しない関数を渡すと、警告ではなく TypeError を投げて処理を停止する。PHP 7.4 までは警告を出して読み込みが続いたため、バージョンを下げると画面が復帰する。ただし原因であるコアファイルの欠落は残ったままなので、根本解決にはならない。

同じログに Wordfence や ThemeWhizzie の Deprecated 警告も出ている。これらは PHP 8 で廃止予定になった古い記法への警告で、単体ではサイトを落とさない。ただ PHP 8 非対応の古いコードが残っている証拠なので、更新で片付けておく必要がある。

debug.logに記録されたエラーを読み分ける

debug.logに記録されたエラーを読み分ける

WordPress のデバッグ情報は wp-content/debug.log に保存される。今回のログには Deprecated 警告が数件並び、最後に Fatal error が1件出ている。サイトが落ちる直接原因は Fatal error の1件だけだ。まだログを有効にしていない場合は、wp-config.php を編集して次の3行を追加する。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Fatal error の内容は「呼び出そうとした関数が見つからない」という意味だ。_wp_register_default_icon_collections が WordPress 本体に無いことから、コアの関数定義が不足していると判断できる。Wordfence の Non-canonical cast や ThemeWhizzie の Creation of dynamic property は、PHP 8 で非推奨となった書き方を警告しているにすぎない。

PHP 7.4系へ切り替えて管理画面に戻る

PHP 7.4系へ切り替えて管理画面に戻る

最初の応急処置として、サーバーの PHP バージョンを 7.4 系へ変更する。ホスティングの管理画面にある「PHP バージョン管理」や「PHP Selector」などから選択するのが一般的だ。IIS 10 で FastCGI を使っている場合は、php-cgi.exe のパスを 7.4 系へ変更する。切り替え後はステージングサイトを再読み込みして、管理画面に入れるか確認する。

PHP 8系での動作
call_user_func_array() が TypeError を投げる
致命的エラーとして処理が停止する
画面に「重大なエラー」と表示される
PHP 7.4系での動作
同じ呼び出しが警告(Warning)になる
処理がスキップされて読み込みが継続する
管理画面へ復帰できる

PHP 8 系ではコールバック不足が TypeError で致命化し、PHP 7.4 系では警告として読み込みが継続する。この違いにより、バージョンを下げると一時的にサイトが復帰する。

ただし PHP 7.4 系はセキュリティサポートが終了している。常用するのは避け、次の手順で WordPress 本体とプラグインを整えた後、PHP 8 系へ戻すのが安全だ。

WordPressコアを再インストールして欠落ファイルを戻す

WordPressコアを再インストールして欠落ファイルを戻す

根本原因は WordPress 本体のファイルが不完全なことだ。管理画面に戻れたら、ダッシュボードの「更新」画面から現在のバージョンを再インストールするのが最も簡単だ。ファイルの欠落や破損が解消され、関数が再び見つかるようになる。

STEP 1 PHP を 7.4 系へ切り替える
STEP 2 管理画面からコアを再インストールする
STEP 3 Wordfence とテーマを更新する
STEP 4 PHP 8 系へ戻して再発を確認する

復旧手順の全体像は上のとおり。各ステップの詳細を以下に示す。

ダッシュボードからコアを再インストールする

管理画面の「ダッシュボード」→「更新」を開くと、「WordPress の最新バージョンを実行しています」の下に「バージョン XX を再インストール」というボタンが表示される。ここを押せば、同じバージョンのコアファイルが公式配布パッケージから取得され、欠落している wp-includes 内のファイルが上書きされる。

再インストール後にステージングサイトを更新し、重大なエラーが消えたかを確認する。もし管理画面にも入れない状態なら、次の FTP で対処する方法を試す。

管理画面に入れないなら FTP で wp-includes を上書きする

ステージングサイトにアクセスできない場合、FTP または SFTP でサーバーへ接続する。WordPress の公式サイトから同じバージョンのパッケージを取得し、その中の wp-includeswp-admin フォルダを、壊れているステージング側へ上書きアップロードする。

wp-content フォルダは上書きしない。ここにはテーマやプラグイン、アップロード画像が入っており、上書きすると設定が消える危険がある。あくまでコアのファイルだけを入れ替えるのが安全だ。

ステージングサイトを作り直す判断

破損の範囲が広い場合や、エラーが複数回繰り返される場合は、WP-Staging でステージングサイトを作り直すのも有効だ。その際、除外設定やファイルコピーの途中で止まっていないか、保存容量が十分かを確認する。ライブサイト側が正常なら、再作成のほうが速く済むことも多い。

Wordfenceと使用テーマをPHP 8対応版へ更新する

Wordfenceと使用テーマをPHP 8対応版へ更新する

Fatal error とは別に、Wordfence と ThemeWhizzie から Deprecated 警告が出ている。これは今すぐサイトを落とすものではないが、PHP 8 系で廃止された書き方を使っており、将来の PHP 更新で同じく致命的エラーへ変わる可能性がある。根本解決の段階でまとめて更新しておく。

Wordfence はプラグインの更新画面から最新版へ更新できる。テーマが市販テーマで更新が止まっている場合は、PHP 8 非対応の警告が出続けるため、テーマの差し替えや該当するウィザード機能の無効化を検討する。更新が終わったら PHP を 8 系へ戻し、ステージングサイトが表示されるか、デバッグログに Fatal error が出ないかを確認する。

よくある質問

PHP 7.4に戻すだけで問題は解決するのか

サイトは一時的に復帰するが、コアファイルの欠落や混在という原因は残る。PHP 7.4 系はセキュリティサポートが終了しているため、WordPress コアの再インストールで根本解決してから PHP 8 系へ戻すのが正しい流れだ。

管理画面にも入れないときはどうするのか

FTP または SFTP でサーバーへ接続し、WordPress 本体の wp-includeswp-admin を公式パッケージから上書きする。その前に wp-config.php でデバッグログを有効にしておくと、上書き後もエラーが出る場合に原因を特定しやすい。

WordPressコアの再インストールでデータは消えるのか

ダッシュボードからの再インストールでは wp-content を触らないため、テーマやプラグイン、アップロード画像、データベースの内容は消えない。念のため実行前にバックアップを取るのが安全だ。

ステージングサイトを作り直した方が速いのか

ファイル破損の範囲が広い場合や再発を繰り返す場合は、WP-Staging で作り直す方が確実だ。その際は除外設定と保存容量を確認し、ライブサイト側が正常であることを先に確かめておく。

Wordfenceの警告をPHP 8のままで消せるのか

Wordfence を最新版へ更新すれば大半の Deprecated 警告は消える。テーマ側の警告が残る場合は、該当するウィザード機能を無効化するか、PHP 8.1 系を選んで一時的に警告を抑える方法もある。ただし警告を無理に隠すより、コードを更新する方が安全だ。

この記事のポイント

  • call_user_func_array の TypeError はコアファイル欠落が PHP 8 で致命化したもの
  • PHP 7.4 への切り替えは応急処置で根本解決ではない
  • 管理画面から WordPress コアを再インストールして欠落ファイルを戻す
  • Wordfence とテーマを更新し PHP 8 へ戻して確認する
  • ステージング作成時の除外設定やファイルの完全性も確認する
Klarna Paymentsで注文支払いページが500エラーになる原因と対処法

Klarna Paymentsで注文支払いページが500エラーになる原因と対処法

Klarna Payments を有効にした WooCommerce サイトで注文支払いページにアクセスした際に「このサイトで重大なエラーが発生しました」と表示される問題は、プラグイン内部のコードに null チェックが欠落していることが原因だ。存在しない注文 ID に対して get_order_key() メソッドを呼び出そうとして致命的エラーが発生している。この問題は Klarna Payments 4.12.0 以前のバージョンで発生し、プラグインのコードを1行修正するか、開発元のアップデートを適用することで解決できる。

存在しない注文の支払いページでなぜ500エラーが起きるのか

存在しない注文の支払いページでなぜ500エラーが起きるのか

このエラーの直接の原因は、Klarna Payments プラグインの class-kp-assets.php ファイル内にある get_checkout_params() メソッドの実装にある。このメソッドは注文支払いページでチェックアウトスクリプトを読み込む際に呼び出されるが、URL パラメータから取得した注文 ID で wc_get_order() を実行したあと、戻り値が false(注文が見つからなかった場合)かどうかを確認せずに get_order_key() を呼び出している。

PHP は false に対してメソッドを呼び出せないため、「Call to a member function get_order_key() on bool」という致命的エラーが発生し、サイトが HTTP 500 を返す。通常 WooCommerce は存在しない注文に対して「この注文は無効です」という通知を表示する仕様だが、Klarna Payments のスクリプトが先にエラーを起こすことで画面全体が停止してしまう。

エラー発生時の処理フロー
URLパラメータ 注文ID取得 wc_get_order()
wc_get_order() false を返す get_order_key() 呼び出し 致命的エラー
修正後の安全なフロー
wc_get_order() false を返す $order の存在チェック false なら処理をスキップ
修正後 修正前

この問題は単に手動で不正な URL を入力した場合だけでなく、実際の運用でも発生する。WooCommerce は定期的に保留中や失敗した古い注文を自動的に削除する(woocommerce_trash_pending_orders などのスケジュールタスク)。顧客が「注文保留中」のメールを受け取り、その支払いリンクをクリックした時点で注文が既に削除されていると、本来表示されるべきエラーメッセージの代わりに HTTP 500 エラーに直面することになる。

エラーが発生しているかどうかを確認する方法

エラーが発生しているかどうかを確認する方法

致命的エラーが発生すると、WordPress はデフォルトで「このサイトで重大なエラーが発生しました」というメッセージを表示し、サイト管理者に自動的にメールを送信する。このメールにはエラーの詳細と、問題が発生したプラグイン名が記載されている。まずはこのメールを確認するのが最も早い。

デバッグモードを有効にしてエラーの詳細を確認する

エラーメールが届いていない場合や、より詳細なスタックトレースを確認したい場合は、WordPress のデバッグログを有効にする。wp-config.php に以下の定数を追加または既存の行を変更する。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

この設定により、エラーは画面に表示されず /wp-content/debug.log ファイルに記録される。問題の URL(存在しない注文 ID を含む注文支払いページ)にアクセスしたあと、このログファイルを開いて「Call to a member function get_order_key() on bool」というエラーが記録されているかを確認する。

サイトヘルス画面でエラー情報を取得する

WordPress 5.2 以降では、管理画面の「ツール」→「サイトヘルス」→「情報」タブで、最近発生した致命的エラーの一覧を確認できる。「WordPress の致命的エラー」セクションに、発生時刻とエラーメッセージが表示されるため、本番環境でデバッグモードを常時有効にできない場合の手がかりとして活用できる。

エラー原因の特定フロー
STEP 1 管理メールを確認する
STEP 2 サイトヘルスで致命的エラー履歴を確認する
STEP 3 デバッグログを有効にして詳細を取得する
STEP 4 「get_order_key() on bool」エラーを特定する

Klarna Payments プラグインのコードを修正する手順

Klarna Payments プラグインのコードを修正する手順

この問題の根本的な解決には、プラグインのコードに適切なガード条件を追加する必要がある。修正対象は /wp-content/plugins/klarna-payments-for-woocommerce/classes/class-kp-assets.php ファイルの get_checkout_params() メソッド内にある約181行目付近のコードだ。

修正前のコードと問題箇所

if ( ! empty( $order_id ) ) {
    $order     = wc_get_order( $order_id );
    $order_key = $order->get_order_key(); // $order が false の場合にエラー
}

修正後の安全なコード

if ( ! empty( $order_id ) ) {
    $order = wc_get_order( $order_id );
    if ( $order ) {
        $order_key = $order->get_order_key();
    }
}

追加するのは「もし $order が存在するなら」という条件分岐の1行だけだ。この修正により、wc_get_order()false を返した場合に get_order_key() の呼び出しがスキップされ、Klarna Payments のスクリプトが正常に読み込まれなくなる代わりに、WooCommerce の標準的な「この注文は無効です」という通知が表示されるようになる。

Before 修正前
$order_key = $order->get_order_key();
→ $order が false だと致命的エラー
After 修正後
if ( $order ) { ... }
→ false なら安全にスキップ

プラグインファイルを安全に編集する際の注意点

プラグインファイルを安全に編集する際の注意点

この修正はプラグインのコアファイルを直接変更するため、次の点に注意が必要だ。最も重要なのは、プラグインが自動アップデートされると修正が上書きされる点である。Klarna Payments の開発元である Krokedil が次回のバージョンでこのバグを修正する可能性が高いため、当面の暫定対応としてのみ行うべきだ。

修正前に必ずバックアップを取得する

FTP クライアントまたはサーバーのファイルマネージャーで class-kp-assets.php をローカルにダウンロードし、class-kp-assets.php.bak のような名前でコピーを保存してから編集する。誤った修正でサイトが停止した場合にすぐ元に戻せるようにするためだ。

プラグインの自動アップデートを一時的に停止する

カスタム修正を適用したプラグインが自動アップデートされると修正が消えるだけでなく、場合によっては修正とアップデートの競合でさらに問題が起きる可能性もある。WordPress 管理画面の「プラグイン」→「プラグインの自動更新を無効化」から Klarna Payments の自動更新をオフにするか、より安全な方法として wp-config.phpdefine( 'WP_AUTO_UPDATE_CORE', false ); を追加してプラグイン自動更新全体を制御する方法もある。ただしこの定数は WordPress コアの自動更新にも影響するため、既存の設定と相談して決める必要がある。

エラーログを監視して修正後の状態を確認する

修正を適用したあとは、デバッグログを数日間監視し、同じエラーが再発していないか確認する。また、実際に存在しない注文 ID を含む URL(/checkout/order-pay/99999999/?pay_for_order=true&key=whatever)にアクセスし、500 エラーではなく「この注文は無効です」という WooCommerce の通知が表示されることを検証する。検証が終わったら WP_DEBUGWP_DEBUG_LOGfalse に戻し、デバッグログファイルを削除する。

よくある質問

プラグインの修正を待つ間の一時的な回避策はあるか

コード修正以外の回避策として、Klarna Payments のチェックアウトフロー設定を「redirect(リダイレクト)」に変更する方法がある。管理画面の「WooCommerce」→「設定」→「支払い」→「Klarna Payments」で「Checkout flow」を「redirect」に設定すると、注文支払いページでのスクリプト読み込み動作が変わる可能性がある。ただしこの設定が確実にエラーを回避するかは環境によって異なるため、検証が必要だ。

このエラーは特定のテーマが原因で発生するのか

テーマは直接の原因ではない。エラーのスタックトレースにテーマ名(例: Shoptimizer)が含まれるのは、テーマが wp_head() を呼び出し、そのフック経由で Klarna Payments のスクリプトが実行されるためだ。テーマを変更してもこの問題は解決しない。原因はあくまで Klarna Payments プラグインのコードにある。

Klarna Payments の代わりに別の決済プラグインに切り替えるべきか

この種の null チェック不足は、特定のバージョンに限った問題であり、他にも多数の決済プラグインで過去に同様のバグが報告されている。Klarna Payments 自体は広く使われている安定したプラグインであり、1つのマイナーなバグのために乗り換えるほどの問題ではない。上記の1行修正で解決できる範囲だ。

同じ修正を子テーマの functions.php で適用できるか

このケースでは適用できない。問題のコードはプライベートメソッド get_checkout_params() 内にあり、WordPress のフィルターフックやアクションフックを提供していない。そのためフックで動作を上書きしたり無効化したりすることができず、プラグインファイルの直接編集が必要になる。フックで対応できるのは、プラグインが明示的に do_action()apply_filters() を提供している箇所に限られる。

この記事のポイント

  • Klarna Payments 4.12.0 以前で存在しない注文の支払いページにアクセスすると致命的エラーが発生する
  • 原因は class-kp-assets.php 内で wc_get_order() の戻り値が false かどうかを確認せずにメソッドを呼び出していること
  • if ( $order ) の1行を追加することでエラーを回避できる
  • プラグインのコアファイルを編集する前に必ずバックアップを取得する
  • プラグインの自動アップデートにより修正が上書きされるため、一時的な対応として扱う
PHP Warning Undefined array key value エラーの原因と直し方

PHP Warning Undefined array key value エラーの原因と直し方

WordPress で PHP 8.x 環境に移行した後、サーバーのエラーログに「Warning: Undefined array key」という警告が大量に記録されるようになった場合、最も確実な解決策は原因となっているプラグインを最新バージョンに更新することだ。この警告はいわゆる「Notice」より深刻度が一つ上の「Warning」だが、サイトの表面的な表示や動作が完全に停止する致命的なエラーではない。

PHP 8.x 環境で「Undefined array key」が頻発する根本的な原因とは

PHP 8.x 環境で「Undefined array key」が頻発する根本的な原因とは

PHP 8.0 以降、コードの実行エンジンが大幅に厳格化された。以前の PHP 7.x 系では配列に存在しないキーを参照しても警告が出ずにスルーされたが、PHP 8.x では「Undefined array key」という警告が発生する。WordPress のプラグインを一手に引き受ける制作会社や個人開発者の視点では、これは「昔のコードの書き方が許されなくなった」状態といえる。

具体的には、配列のキーを直接参照するコードが原因だ。例えば、$field['value'] のように配列のキーを直接指定すると、そのキーが存在しない限り例外や警告が出る。今回の「lib-widget-fields.php」のように、ウィジェット側で「value」キーを出力する仕様になっていないのに、テンプレート側でそれを読み込もうとすると、PHP の厳格な構文チェックに引っかかる。

PHP 7.x と PHP 8.x のコード解釈の違い
PHP 7.x(寛容)
$value = $field['value'];
キー ‘value’ がなくても、null が入るだけで警告は発生しない。
PHP 8.x(厳格)
$value = $field['value'];
キー ‘value’ がないと「Warning: Undefined array key “value”」が発生する。
PHP 7.x まで通っていたコード  PHP 8.x でエラーになるコード

エラーログを止める最も確実な方法「プラグインのアップデート」

エラーログを止める最も確実な方法「プラグインのアップデート」

WordPress で「Undefined array key」が特定のプラグイン(たとえば Directorist のようなディレクトリ系テーマ・プラグイン)で発生する場合、最優先で行うべきはそのプラグインのアップデートだ。成熟したプラグインであれば、開発チームがすでにコードを修正し、PHP 8.x 向けに配列キーの存在チェックを追加した新しいバージョンをリリースしている可能性が高い。

管理画面の「ダッシュボード」→「更新」画面から手動で更新するか、利用しているプラグインの公式サイトで最新バージョンがリリースされていないか確認する。自動更新が無効になっていると、修正パッチが適用されずにいつまでもエラーログが肥大化し続ける。サイトヘルス画面やサーバーのディスク容量を圧迫する前に手を打つべきだ。

すぐに警告を非表示にする「wp-config.php」の設定変更

すぐに警告を非表示にする「wp-config.php」の設定変更

プラグインの更新がまだ提供されていない、または何らかの理由で更新できない事情がある場合、サーバー設定ファイル wp-config.php を調整して警告を非表示にできる。ただしこれはあくまで対症療法であり、根本的なコードの修正ではないことを理解しておきたい。本番環境では、エラーを画面に表示させず、ログだけに記録する設定が原則だ。

wp-config.php 編集手順
STEP 1 FTP またはサーバーのファイルマネージャーで WordPress インストールディレクトリにアクセスする
STEP 2 wp-config.php をダウンロードし、テキストエディタで開く
STEP 3 以下のコードを記述し、本番環境では debug display を徹底的に false にする
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);
STEP 4 上書き保存してサーバーにアップロードする

上記の設定により、PHP の警告は画面に表示されなくなるが、/wp-content/debug.log には引き続き記録される。完全にログ出力自体をやめたい場合は WP_DEBUG を false にするが、別の問題が起きたときに原因究明が遅れるため、ログへの記録は有効にしたまま画面への表示を切る方法が現実的だ。

緊急時の応急処置としてコードを直接修正する

緊急時の応急処置としてコードを直接修正する

プラグインのアップデートがいつになるかわからず、かつデバッグ表示オフではカスタマイザー上での操作に支障が出るなどワークフロー上の問題がある場合、最終手段としてプラグインのソースコードを直接修正する手がある。

具体的には、配列のキーを読み込む前に、そのキーが存在するかチェックするか、PHP 7.0 から導入された Null 合体演算子(??)を使ってデフォルト値を与える。先の例でいえば、$field['value'] という部分を $field['value'] ?? '' に書き換えれば、キーが存在しない場合は空文字が代入され、警告は出なくなる。

暫定コード修正の Before/After
Before(エラー)
value=""
After(安全)
value=""
キー未定義時のWarning発生  Null合体演算子で空文字を代入

この作業は必ず「FTP を使えるか」「バックアップが取れるか」という前提の下で行う。くれぐれも子テーマで上書きできる範囲の関数であれば function.php に記述するべきだが、プラグインのコアファイルは直接触らざるを得ない。修正後はそのプラグインの自動更新を一旦停止し、公式の修正版がリリースされたら必ず元に戻してアップデートする手順を徹底する必要がある。

よくある質問

このエラーはサイトを完全に停止させる致命的なエラーですか

多くの場合、これは「Warning(警告)」であり、サイトの表示が真っ白になるような「Fatal error(致命的エラー)」とは性質が異なる。サイトは表示され続けるが、サーバーのエラーログファイルが短期間で肥大化する原因になる。また、管理画面のウィジェット設定画面やカスタマイザーでレイアウトが崩れたり、意図しない文字列が出力される可能性はある。

WP_DEBUG を false にすれば解決しますか

WP_DEBUG を false にすれば、エラーメッセージが実際のサイト画面やログファイルにすら出力されなくなる。しかしこれは「警告を見えなくした」だけであり、コードの潜在的な問題が解決したわけではない。PHP 8.x における動作が保証されていないコードを放置することになるため、開発環境ではログを取りつつ、本番環境では画面表示を切るという運用が基本になる。

エラーログの場所がわかりません

WP_DEBUG_LOG が true の場合、通常は /wp-content/debug.log に出力される。サーバーのコントロールパネル(cPanel など)に「エラーログ」機能がある場合はそちらにも記録される。FTP でアクセスしても見つからない場合は、wp-config.php で WP_DEBUG_LOG が正しく定義されているか、ファイルの書き込み権限があるかを確認する。

さくらインターネットやエックスサーバーで PHP 8.3 に変更したらこのエラーが出ました

国内の主要レンタルサーバーでは、管理画面から PHP のバージョンを簡単に切り替えられる。PHP 7.4 から 8.3 へ一気に上げると、旧式のコードを抱えたプラグインやテーマが一斉に警告を出すことがある。切り替え前にローカルやステージング環境で動作確認を行うのが理想だが、もし本番環境で出てしまった場合は、まずプラグインの一括更新を試し、それでも直らないものだけ個別に開発元へ報告するのが現実的な対処法だ。

functions.php でエラーの轍を消せませんか

残念ながら、特定のプラグインが内部で無造作に配列を直接参照している場合、テーマの functions.php からその挙動を直接上書きしてなかったことにはできない場合が多い。プラグインのコードに isset() などが欠如しているならば、前述の通りプラグインファイル自体を修正するか、プラグインのフックが用意されていればそれで値を事前に定義するなどの手段を取る必要がある。

この記事のポイント

  • 「Undefined array key」は PHP 8.x で厳格化された構文チェックが原因
  • プラグインを最新バージョンに更新することで根本解決する
  • 一時しのぎには wp-config.php で WP_DEBUG_DISPLAY を false に設定する
  • Null 合体演算子(??)を用いたコード修正は応急処置であり、アップデートで上書きされる前提で行う
  • エラーログの肥大化を防ぎつつ、開発元へ報告することで結果的にエコシステム全体が改善される
WordPressエディタが真っ白になる原因と直し方

WordPressエディタが真っ白になる原因と直し方

管理画面のブロックエディタを開いた際に編集エリアが完全に白紙になる主な原因は、プラグインやテーマの競合、または PHP の致命的エラーだ。まず標準テーマへの切り替えと全プラグインの無効化で原因を特定し、それでも解決しない場合はデバッグモードでエラーログを確認する。

エディタ画面が真っ白になる根本的な原因

エディタ画面が真っ白になる根本的な原因

WordPress のブロックエディタ(Gutenberg)で編集画面を開いたときに真っ白なページしか表示されない現象は、大きく分けて 2 つの原因で発生する。1 つはプラグインやテーマの競合、もう 1 つは PHP の致命的エラー(「このサイトで重大なエラーが発生しました」と表示される類のもの)だ。

ブロックエディタは JavaScript を多用する高度な画面であり、複数のプラグインが読み込むスクリプト同士で競合が起きると、画面の描画が完全に停止してしまう。またテーマが古い jQuery や独自のエディタ拡張をロードしている場合も、エディタの初期化処理と衝突して空白画面を引き起こす。

PHP の致命的エラーが原因の場合は、エディタ画面そのものが生成される前に処理が中断されている状態だ。たとえばメモリ不足や、特定のプラグインが要求する PHP 拡張機能の不足、あるいは functions.php に記述された独自コードの文法ミスなどが該当する。こうしたエラーは管理画面全体に影響する場合もあるが、投稿編集画面だけが重い処理を要求するタイミングで発覚することも多い。

■ 白紙エディタの主な原因
JavaScript の競合
複数のプラグインやテーマが読み込むスクリプトが衝突し、エディタの初期化が止まる
PHP の致命的エラー
メモリ不足・プラグインの不具合・functions.php の記述ミスなどで画面生成前に停止
REST API の障害
セキュリティプラグインやサーバー設定が WordPress の REST API 通信を遮断している

プラグインとテーマの競合を切り分ける手順

プラグインとテーマの競合を切り分ける手順

まず最初に試すべきは、プラグインの全無効化と標準テーマへの切り替えだ。この手順だけで多くの白紙エディタ問題は解決する。管理画面にアクセスできる状態であれば、以下の流れで原因を特定できる。

STEP 1 管理画面の「プラグイン」→「インストール済みプラグイン」で全プラグインを一括無効化する
STEP 2 「外観」→「テーマ」で Twenty Twenty-Five などの標準テーマを有効化する
STEP 3 エディタを再度開き、正常に表示されるか確認する
STEP 4 正常化したらプラグインを 1 つずつ再有効化し、問題が再発するタイミングで原因を特定する
STEP 1〜2 でほとんどの問題が解決する

Health Check プラグインで訪問者に影響を与えずに調査する

本番サイトでプラグインを一括無効化すると、訪問者に見えているサイトのレイアウトが一時的に崩れるリスクがある。プラグイン「Health Check & Troubleshooting」を導入すれば、自分がログインしている間だけプラグイン無効化とテーマ切り替えが適用され、一般の訪問者には通常通りの表示が保たれる。

「Health Check & Troubleshooting」は WordPress.org の公式プラグインディレクトリから無料でインストールできる。有効化後に「トラブルシューティング」タブを開き「トラブルシューティングモードを有効にする」ボタンを押すだけで、安全に調査を開始できる。特定のプラグインだけを個別に再有効化しながら編集画面の挙動を確認できるため、競合元の絞り込みに非常に有効だ。

テーマの functions.php が原因になるケース

標準テーマに切り替えた途端にエディタが正常化した場合、それまで使っていたテーマ(あるいは子テーマ)の functions.php に問題がある可能性が高い。よくあるのは、エディタ向けのカスタムスタイルやブロック追加のコードが WordPress のバージョンアップ後に非推奨の関数を使い続けているケースだ。

functions.php の中で add_action('enqueue_block_editor_assets', ...)add_filter('block_editor_settings_all', ...) を使ってエディタに介入している箇所があれば、それらを一旦コメントアウトして様子を見ると原因の切り分けになる。

デバッグモードでエラーログを取得する

デバッグモードでエラーログを取得する

プラグインとテーマの切り分けでも解決しない場合、PHP の致命的エラーが発生している可能性が高い。画面には何も表示されないが、裏側でエラーが起きている。そこで WordPress のデバッグモードを有効にして、エラーログをファイルに記録させる。

wp-config.php にデバッグ定数を追加する

FTP やレンタルサーバーのファイルマネージャーでサーバーに接続し、WordPress のルートディレクトリにある wp-config.php を編集する。ファイル末尾の /* That's all, stop editing! */ よりも手前に、以下の 3 行を追加または上書きする。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

WP_DEBUG を true にするとデバッグモードが有効になる。WP_DEBUG_LOG を true にすると、エラーの内容が /wp-content/debug.log ファイルに出力される。WP_DEBUG_DISPLAY を false にしておけば、エラーが画面に表示されず、訪問者にも影響が出ない。

設定後に問題のエディタ画面を再度開き、その後 /wp-content/debug.log をテキストエディタで開く。PHP のエラーメッセージが記録されていれば、どのファイルの何行目で問題が起きているかが具体的にわかる。たとえば「Allowed memory size of 〜 bytes exhausted」ならメモリ不足、「Call to undefined function 〜」なら関数の未定義が原因だと絞り込める。

debug.log でよく見られるエラーと対処
メモリ不足
「Allowed memory size of 〜 bytes exhausted」→ wp-config.php で define('WP_MEMORY_LIMIT', '256M'); を追加
未定義の関数
「Call to undefined function 〜」→ 該当のプラグイン/テーマを最新版に更新するか無効化
正常な場合
debug.log が空、または Notice/Warning のみ → PHP エラーは原因ではない

ブラウザの開発者ツールで JavaScript エラーを確認する

ブラウザの開発者ツールで JavaScript エラーを確認する

PHP のエラーログに何も記録されていない場合、JavaScript の実行時エラーが原因でエディタが空白になっている可能性が高い。この場合はブラウザの開発者ツールを使う。

Chrome の場合、編集画面を開いた状態でキーボードの F12 キーを押して開発者ツールを起動し、「Console」タブを選択する。赤いエラーメッセージが表示されていれば、それがエディタの読み込みを止めている原因だ。Uncaught TypeErrorUncaught ReferenceError のようなエラーが出ていれば、特定のスクリプトが正しく動作していないことを示している。

エラーの内容にプラグイン名やテーマ名が含まれていることが多いため、そのプラグインを無効化すれば問題が解決する。コンソールにエラーが一切出ていない場合は、REST API の通信が遮断されているケースが疑われる。開発者ツールの「Network」タブで、wp-json を含むリクエストが赤く表示されていないか確認する。401(認証エラー)や 403(禁止)が返っている場合は、セキュリティプラグインやサーバー側の WAF(Web アプリケーションファイアウォール)が REST API をブロックしている可能性が高い。

よくある質問

プラグインを無効化する管理画面すら真っ白で開けない場合はどうするのか

FTP またはレンタルサーバーのファイルマネージャーで /wp-content/plugins/ ディレクトリにアクセスし、プラグインフォルダを一時的に別の名前にリネームする。たとえば plugin-name_plugin-name に変更すれば、WordPress はそのプラグインを認識しなくなり、管理画面にアクセスできるようになる。

特定のページだけエディタが真っ白になるのはなぜか

特定のページに埋め込まれたショートコードやブロックが、対応するプラグインの JavaScript エラーを引き起こしている可能性が高い。またページのリビジョン数が極端に多い場合も、エディタの読み込みが重くなりタイムアウトすることがある。リビジョンを整理するか、該当ページを複製して編集し直すと改善する場合がある。

ブラウザを変えても同じ症状か確認したほうがよいか

確認する価値はある。まれにブラウザの拡張機能(特に広告ブロッカーやセキュリティ系)がブロックエディタのスクリプトを遮断しているケースがある。シークレットウィンドウや別のブラウザでログインして編集画面を開き、同じ症状が出るかどうかを見ると、ブラウザ側の要因かどうかを切り分けられる。

WordPress 本体の再インストールは効果があるか

コアファイルの破損が疑われる場合に限り効果がある。管理画面の「ダッシュボード」→「更新」から「WordPress を再インストール」を選ぶと、コアファイルだけがクリーンな状態に置き換わる。テーマやプラグイン、データベースには影響しないため、手軽に試せる。ただしプラグインの競合や PHP エラーが原因の場合は再インストールしても改善しない。

編集画面が真っ白な状態で記事を更新する応急的な方法はあるか

ブロックエディタが使えない場合の回避策として、クラシックエディタプラグインを有効化する方法がある。旧式の編集画面に切り替わるため、JavaScript の競合の影響を受けにくい。根本解決ではないが、急ぎの更新作業が必要な場合の一時的な回避策として使える。また「QuickPost」のような外部ツールを使う方法もあるが、環境に依存するため万能ではない。

この記事のポイント

  • エディタの白紙はプラグイン/テーマ競合か PHP エラーが主因
  • 全プラグイン無効化と標準テーマ有効化で原因を切り分ける
  • Health Check プラグインで訪問者に影響なく調査できる
  • wp-config.php のデバッグ設定でエラーログを取得する
  • ブラウザの開発者ツールで JavaScript エラーも確認する
WP Event Manager Calendarで致命的エラーが出た時の原因と直し方

WP Event Manager Calendarで致命的エラーが出た時の原因と直し方

WP Event Manager Calendarを有効化すると「Call to undefined function get_event_manager_template()」という致命的なエラーが表示される場合、本体プラグインであるWP Event ManagerとCalendarアドオンのバージョンに互換性の問題が生じている。両方のプラグインを最新版に揃え、それでも直らなければ子テーマのfunctions.phpで関数を一時的に手動定義することで回避できる。

なぜWP Event Manager Calendarでエラーが出るのか

このエラーの根本原因は、アドオンプラグインが呼び出すget_event_manager_template()という関数が、本体のWP Event Manager側で削除されたか、名称変更されていることにある。もともとこの関数は、イベントデータの表示やカレンダー画面の生成を担うテンプレートを読み込むための重要な役割を持っていた。

Calendarアドオンがバージョン3.2.2の時点では問題なく動作していたことから、3.2.2とそれ以降の本体プラグインとの間で、関数の定義に何らかの変更が加えられたと考えられる。ところがアドオン側がその変更に追随しておらず、最新の3.4.0でもエラーが解消されていない状態だ。

WordPressでは、依存関係にあるプラグイン同士のバージョン管理はプラグイン開発者に委ねられている。片方だけ更新したり、互換性の確認を怠ったりすると、今回のように未定義の関数呼び出しによる「Fatal error」が発生し、管理画面に「このサイトで重大なエラーが発生しました」と表示される。

エラーメッセージを正確に特定してデバッグモードを有効にする方法

エラーメッセージを正確に特定してデバッグモードを有効にする方法

エラーが発生するとWordPressは「このサイトで重大なエラーが発生しました」という画面を表示し、管理画面にもアクセスできなくなるケースが多い。まずはエラーの詳細を正確に把握するため、WP_DEBUGモードを有効にしよう。

FTPクライアントやサーバーのファイルマネージャーで、WordPressインストールディレクトリにあるwp-config.phpを開く。次の記述を探し、それぞれtrueに変更する。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

WP_DEBUG_DISPLAYfalseにすることで、エラーが画面に表示されるのを防ぎつつ、/wp-content/debug.logにログが出力される。このログファイルを確認すれば、先ほどのCall to undefined function get_event_manager_template()と、どのファイルの何行目でエラーが起きたかを正確に特定できる。

WP Event Manager本体とCalendarアドオンの互換性を確保する手順

WP Event Manager本体とCalendarアドオンの互換性を確保する手順

ここでは、エラーを解消するための具体的な手順を4つのステップに分けて示す。まずは基本となるプラグインの全更新から始め、それでも解決しない場合の暫定対応までを押さえる。

STEP 1 WP Event Manager(本体)を最新バージョンに更新する
STEP 2 WP Event Manager Calendarを最新版に更新する
STEP 3 全プラグインを無効化し、キャッシュをクリアして動作確認
STEP 4 子テーマのfunctions.phpに関数を追加して暫定対応

STEP 1からSTEP 3で環境をクリーンな状態に戻す

まず管理画面の「プラグイン」から、WP Event Manager本体が最新であることを確認する。更新可能な場合は更新を実行する。次にCalendarアドオンも同様に最新に揃える。アドオンの更新が提供されていない場合は、一度無効化と再有効化を試すとキャッシュされた古い依存関係が解消されることがある。

両方のプラグインを最新にしたら、一度すべてのプラグインを無効化してから再度必要なものだけを有効化し、ブラウザのキャッシュやサーバー側のキャッシュ(W3 Total CacheやWP Super Cacheなどを使用中の場合)もクリアする。その上で再度カレンダー機能が正常に動くかをテストする。

STEP 4で不足している関数を手動定義する

すべての更新を終えてもエラーが続く場合、WP Event Manager本体が関数の実装を完全に削除してしまっている可能性が高い。この場合の暫定対応として、子テーマのfunctions.phpに、不足している関数を手動で定義する方法がある。

次のコードは、本体プラグインの過去の実装を参考に、get_event_manager_template()関数を再定義する例だ。子テーマのfunctions.phpの末尾に追加する。

if ( ! function_exists( 'get_event_manager_template' ) ) {
    function get_event_manager_template( $template_name, $args = array(), $template_path = 'wp-event-manager', $default_path = '' ) {
        if ( $args && is_array( $args ) ) {
            extract( $args );
        }
        $located = locate_template( array( $template_path . '/' . $template_name ) );
        if ( ! $located && file_exists( WP_PLUGIN_DIR . '/wp-event-manager/templates/' . $template_name ) ) {
            $located = WP_PLUGIN_DIR . '/wp-event-manager/templates/' . $template_name;
        }
        if ( $located ) {
            include( $located );
        }
    }
}

このコードは、まず関数が存在しないかをfunction_exists()で確認し、存在しなければテンプレートファイルをlocate_template()で探して読み込むという最小限の実装だ。本来のWP Event Managerが提供していた機能のすべてを再現するものではないが、Calendarアドオンが最低限必要とする「テンプレート読み込み」の役割を補い、エラーの発生を抑える効果が期待できる。

ただし、これはあくまで緊急回避策だ。WP Event Managerの内部実装に依存しているため、将来のアップデートでさらに互換性の問題が生じる可能性もある。根本的にはプラグイン開発者による修正を待つか、別のイベント管理プラグインへの切り替えを検討する必要がある。

よくある質問

他のイベント管理プラグインに乗り換えたほうがよいのか

WP Event Managerのエコシステム内で完結したい事情がない限り、乗り換えは有効な選択肢だ。The Events CalendarやEvents Managerなどの代替プラグインは、本体とアドオンの互換性がより厳格に管理されている傾向がある。ただし乗り換えの際はイベントデータのエクスポートとインポートの手間が発生する。

無料版のWP Event Managerでもこのエラーは起こるのか

WP Event Managerには無料のコアプラグインと、有料のアドオンが存在する。Calendarアドオンが有料版でのみ提供されている場合、無料版の本体だけではエラーは発生しない。しかし無料アドオンと併用していて同じエラーが起きる場合は、やはり本体とアドオンのバージョン不一致が原因となる。

他のアドオンも同時に影響を受ける可能性はあるか

get_event_manager_template()はWP Event Managerの複数のアドオンから呼び出される共通関数だった可能性が高い。そのため、Calendar以外のアドオン(登録フォームや検索機能など)でも、同じ「Call to undefined function」エラーが発生するリスクがある。本体の更新後は、使用中のすべてのアドオンを一括で最新バージョンに揃えることが重要だ。

重要なサイトで突然このエラーが出た場合の応急措置は

まずFTPでwp-content/plugins/wp-event-manager-calendarフォルダを一時的にリネームしてCalendarアドオンを無効化し、サイトを正常表示に戻す。その間にデバッグログを確認して原因を特定し、STEP 1からSTEP 3の更新作業を進める。どうしても復旧が急がれる場合は、STEP 4の関数手動定義でエラーを抑え込む。

プラグインを最新にしても直らない場合の最終手段は

WP Event Managerのサポートフォーラムや公式ドキュメントで、同じエラーに関する最新の報告がないか確認する。開発チームが修正版をリリースするまでのつなぎとして、古い安定バージョン(今回のケースでは3.2.2)にロールバックする方法もある。WP Rollbackプラグインを使えば、管理画面から安全に旧バージョンへ戻せる。

この記事のポイント

  • エラーはWP Event Manager本体とCalendarアドオンのバージョン不一致が主因
  • 両方のプラグインを最新版に更新し、キャッシュをクリアして動作確認する
  • WP_DEBUGモードでエラーの正確な発生箇所を特定する
  • どうしても直らない場合は子テーマで関数を手動定義して暫定回避する
  • 根本解決にはプラグイン開発者の修正か代替プラグインへの移行を検討する
Safari MCP ServerでAIデバッグ、SEOとCWV改善の新時代

Safari MCP ServerでAIデバッグ、SEOとCWV改善の新時代

Safari MCP Serverとは何か、その本質

WebKitチームが2026年7月、Safariブラウザ向けのMCPサーバーを発表した。これはAIエージェントがSafariブラウザの内部データに直接アクセスし、デバッグやパフォーマンス分析を自律的に行うための仕組みである。開発者やSEO担当者が手作業で行っていたSafari固有の問題検出が、AIとの対話によって自動化される可能性を示している。

Safariは世界で2番目に利用者の多いブラウザであり、特に米国市場では25%から30%超のシェアを維持する。日本国内でもiPhoneユーザーを中心に無視できない存在だ。つまり、Safariでサイトが正常に動作しないことは、ビジネス機会の直接的な損失を意味する。今回のMCP対応は、この課題を根底から変える契機となる。

従来のSafariデバッグ
開発者 手動でSafari DevToolsを起動
開発者 ネットワークタブ・コンソールを目視確認
開発者 問題箇所を推測し修正を適用
時間がかかり属人的  Safari固有の問題を見逃しやすい
Safari MCP Server導入後
開発者 「CWV低下の原因を調べて」とAIに指示
AIエージェント SafariのDOMとネットワーク情報を自動取得
AIエージェント 問題箇所を特定し修正案を提示
自動化で作業時間が大幅短縮  見落としが減り品質が向上
人間(開発者)  AIエージェント  問題・課題  改善・解決

デモが示すように、手動で行っていた一連の作業をAIが肩代わりする。この変化は単なる効率化ではなく、Safari対応の質そのものを底上げする力を持つ。

発表の背景とSafariの市場地位

Statcounterの2026年データによれば、Safariの米国市場シェアは四半期によって25%から33%の間で推移している。モバイルに限定すればさらに高く、iOSデバイスが支配的な日本市場でも同様の傾向だ。Web制作者にとってSafari対応は「できれば対応したい」ではなく「対応しなければ事業機会を逃す」段階に入っている。

しかしSafariは、Chromium系ブラウザとは異なるレンダリングエンジン(WebKit)を採用しており、CSSの解釈やJavaScriptの挙動に差異が生じる。これまではMac実機やSafariの開発者ツールを使い、人間が一つひとつ問題を探る必要があった。この非効率をAIで解決するのが、今回のMCPサーバー投入の狙いだ。

MCPが変えるブラウザとAIの関係

MCP(Model Context Protocol)は、AIモデルが外部のツールやデータソースと安全に通信するためのオープンプロトコルである。Anthropicが2024年に提唱し、いまではWordPressやShopify、Google Search Console、Screaming Frogなど主要なCMSやSEOツールが対応している。ブラウザがMCPに対応するのは自然な流れであり、Safariはその先陣を切った形だ。

従来、AIにデバッグを依頼する際は、開発者が問題状況を文章で詳細に説明する必要があった。状況説明が曖昧だとAIの回答精度も落ちる。Safari MCPサーバーはこの壁を取り払う。AIエージェントが自らブラウザのDOM構造やネットワークリクエストを取得し、問題を直接把握できるようになるからだ。

なぜ今Safariのデバッグが重要なのか

なぜ今Safariのデバッグが重要なのか

Webサイトの表示崩れや機能不全は、直帰率の上昇とコンバージョン率の低下に直結する。とくにSafariはiOSユーザーという購買意欲の高い層を抱えており、ここでの不具合はECサイトや予約サイトにとって致命的だ。にもかかわらず、Safari固有のバグ検出にはこれまで大きな労力がかかっていた。

さらに、Core Web Vitals(CWV)の評価は検索順位にも影響を与える。Googleのランキングシグナルとして機能するCWVにおいて、Safari上での読み込み遅延やレイアウトシフトが起きていれば、それは検索パフォーマンス全体を引き下げる要因になる。AIデバッグによってこの問題を素早く特定し修正できる意義は大きい。

Safari固有の問題がSEOに与える損害

Safariでは、特定のCSSプロパティ(例えばbackdrop-filterの挙動やscroll-behaviorの解釈)が他ブラウザと異なる。JavaScriptにおいてもResizeObserverのループ制限やIntersection Observerのしきい値処理に差異が見られる。これらの不一致がCWVのスコア悪化を引き起こし、結果として検索順位の低下を招く。

従来は、Mac環境がないチームはSafari検証を後回しにする傾向があった。しかしAIが代わりに検証してくれるなら、開発プロセスの初期段階からSafari互換性を組み込める。SEOの観点では、これはリリース後の急な順位下落リスクを減らす直接的な効果を持つ。

デバッグの民主化がもたらす競争環境の変化

AIエージェントによる自動デバッグは、個人事業主や小規模チームにこそ恩恵が大きい。専任のSafari検証担当者を置けない組織でも、AIがその役割を果たすからだ。大企業と中小企業のあいだにあった「ブラウザ互換性の検証格差」が縮まり、Safari上でのユーザー体験を基準にした真の実力勝負に近づく。

これはSEOの世界においても、小手先のテクニックよりも基本品質がモノを言う時代の到来を意味する。Safari MCPサーバーはその流れを加速させるツールであり、いち早く導入したサイト運営者が優位に立つ構図が予想される。

Safari MCP対応がSEOにもたらす変化
✅ CWVスコア改善:Safari上でのLCPやCLSの問題をAIが迅速に特定
✅ 検索順位の安定化:ブラウザ互換性に起因するランキング変動を抑制
✅ モバイルSEOの強化:iOSユーザー体験の向上がコンバージョンに直結
✅ 属人性の排除:Safari知識がなくてもAIが最適な修正案を提示

上記のリストは、Safari MCPサーバーがSEO施策に与えるインパクトを整理したものだ。これらの効果はすべて、従来の手動デバッグでは「時間がかかりすぎるから後回し」とされてきた領域である。AIがこの障壁を取り除く。

MCP(Model Context Protocol)の基礎知識

MCP(Model Context Protocol)の基礎知識

MCPはAIモデルが外部リソースと対話するための標準プロトコルだ。簡単に言えば「AIのためのUSB規格」のような存在である。USBがあらゆる周辺機器を共通の接続方式で扱えるように、MCPはあらゆるデータソースやツールをAIが共通の手順で扱えるようにする。

従来、AIに特定のタスクを実行させるには、そのツール専用のAPI連携を個別に開発する必要があった。MCPはこの非効率を解消する。SafariがMCPサーバーを提供することで、あらゆるMCP対応AIクライアントがSafariのブラウザ情報にアクセスできるようになった。

MCPのエコシステムと業界全体の動き

MCPはAstroやWordPress、WooCommerce、Shopifyといった主要CMSがすでにサポートを表明している。SEOツールのScreaming FrogもMCPを採用し、Google Search Consoleも対応を進めている。Safariの参入は、このプロトコルがブラウザというWeb技術の最前線にまで到達したことを示すマイルストーンだ。

Search Engine Journalの記事では、この流れを「ブラウザとAIの統合が新たな段階に入った」と評している。AIが単にコードを提案するだけの存在から、実行環境の状態をリアルタイムで把握しながら問題解決する存在へと進化しているのだ。

MCPエコシステムの全体像
AIモデル 自然言語で指示を理解 MCPプロトコル 共通の通信規格で接続 Safari MCPサーバー ブラウザ情報を提供
CMS(WordPress / Shopify / Astro)もMCP対応を拡大中
SEOツール(Screaming Frog / Google Search Console)もMCP対応

MCP対応の広がりは、AIエージェントが一つのプロトコルで多様なツールを横断的に操作できる未来を示している。SEO担当者はScreaming FrogとSafariとGoogle Search Consoleのデータを、一つのAI対話の中で統合的に扱えるようになるだろう。

Safari MCP Serverが切り拓くAIデバッグの実態

Safari MCP Serverが切り拓くAIデバッグの実態

WebKitの公式発表によれば、Safari MCPサーバーは以下の5つの主要ユースケースを想定している。(1)アクセシビリティテスト、(2)Safari互換性テスト、(3)任意のユーザー状態の検証、(4)Safari上でのWeb開発、(5)Webパフォーマンス分析、である。これらはいずれもSEOに密接に関係する領域だ。

特筆すべきは、AIエージェントが「ブラウザの中で何が起きているかを自分で調べる」能力を得た点だ。公式アナウンスにある「完璧なプロンプトを書く必要がなくなる」という言葉が、この変化の本質を突いている。開発者はAIに「このページのCWVを改善して」と大まかに指示するだけで、AIが必要なデータを収集し分析し提案まで行う。

アクセシビリティとSEOの融合

アクセシビリティテストの自動化は、SEOの観点からも見逃せない。画像のalt属性不足やセマンティックHTMLの欠如は、スクリーンリーダー利用者の体験を損なうだけでなく、検索エンジンのコンテンツ理解も阻害する。AIがSafari上でこれらの問題を自動検出することで、SEOとアクセシビリティの両面改善が同時に進む。

Webパフォーマンス分析の深化

Webパフォーマンス分析では、ネットワークリクエストのタイムラインやDOMの構築過程をAIが精査する。従来のLighthouse監査では検出できなかったSafari固有のボトルネック、例えば特定のフォント読み込みがWebKitでだけ遅延する問題なども、AIが実ブラウザ上で直接観測できる。

この「実機ブラウザベースのパフォーマンス分析」は、合成監視では得られないリアルなデータをもたらす。CWVのフィールドデータとラボデータの乖離に悩まされてきたSEO担当者にとって、Safari MCPサーバーは問題の根本原因を特定する強力な武器になる。

Safari MCPサーバーの5大ユースケース
1 アクセシビリティテスト:ARIA属性やキーボード操作の検証を自動化 ←SEOにも直結
2 Safari互換性テスト:WebKit固有のCSS・JS問題をAIが特定 ←モバイルSEOに不可欠
3 ユーザー状態検証:ログイン状態やセッションに依存する不具合を確認
4 Web開発支援:DOM操作やイベント処理のデバッグを効率化
5 Webパフォーマンス分析:ネットワーク遅延やレンダリングブロックを検出 ←CWV改善の中核
※ 番号は優先順位ではなく、公式が掲げる全ユースケースを列挙したもの

5つのユースケースはそれぞれ独立しているが、実際の開発フローではこれらが複合的に作用する。たとえばアクセシビリティの問題を修正した結果、DOM構造が変わりCWVにも影響が出る、といった連鎖的な改善をAIが一括管理できる点が新しい。

SEOとCore Web Vitalsへの実戦的インパクト

SEOとCore Web Vitalsへの実戦的インパクト

Safari MCPサーバーがSEOにもたらす最大の恩恵は、CWV(Core Web Vitals)のスコア改善スピードが飛躍的に上がることだ。これまでLCP(Largest Contentful Paint)の改善には、どのリソースがクリティカルレンダリングパスを塞いでいるかを人間が特定する必要があった。AIがSafariのネットワークタイムラインを直接解析すれば、この作業は数秒で完了する。

CLS(Cumulative Layout Shift)についても同様だ。Safariはフォントのレンダリング方式や画像の遅延読み込みの挙動がChromium系と微妙に異なり、意図しないレイアウトシフトが発生することがある。AIが実際のSafariブラウザ上で測定することで、ラボツールでは再現できない問題まで捕捉できる。

フィールドデータとラボデータの統合分析

Google Search ConsoleのCWVレポートはフィールドデータに基づくが、問題の原因特定にはラボデータが必要になる。Safari MCPサーバーは、実ブラウザのラボデータをAIが直接取得するため、この二つのデータの橋渡し役を担う。フィールドデータでCWV低下を検知したら、すぐにSafari上でAIデバッグを実行し、具体的な修正案を得られる流れが現実的になる。

AI時代のSEOワークフロー

従来のSEOワークフローは「監視→検出→人間が仮説立案→人間が検証→修正→再測定」というサイクルだった。Safari MCPサーバーの登場により、「監視→AIが検出→AIが原因特定→AIが修正案提示→人間が承認→修正→AIが再検証」という形に変わる。人間の役割は「仮説立案」から「AI提案の判断と承認」へとシフトする。

この変化は、SEO担当者のスキルセットにも影響を与えるだろう。Safari DevToolsを細かく操作する技術よりも、AIに適切な指示を出し、出力結果の品質を見極める能力が重視されるようになる。Search Engine Journalの記事が伝える内容からも、このパラダイムシフトは2026年後半から本格化すると見られる。

SEOワークフローのBefore/After
Before(従来)
Lighthouse監査 → 開発者が手動でSafari検証 → 仮説立案 → 修正 → 再テスト
所要時間が長く、人的リソースに依存
After(Safari MCP導入後)
CWVアラート → AIがSafariで自動デバッグ → 修正案を自動提示 → 人が承認
短期間での修正が可能、属人性が大幅に低減

このワークフロー比較が示すように、Safari MCPサーバーはSEOオペレーションの速度と精度を根本から変える。人間は戦略判断に集中し、反復的な検証作業はAIに任せるという分業が可能になる。

導入から活用までの具体的ステップ

導入から活用までの具体的ステップ

Safari MCPサーバーは発表されたばかりであり、本格的な実装と提供方法についてはAppleからの続報が待たれる段階だ。しかし、すでにMCPを導入している他ツールの事例から、準備すべき環境と心構えは明確になっている。以下に、現時点で想定される導入ステップを示す。

環境準備とAIクライアントの選定

まず必要なのはMac環境と、MCP対応のAIクライアントだ。Claude Desktopや、Cursor、WindsurfなどMCPをサポートするエディタが候補になる。Safari Technology Previewの最新版にMCPサーバー機能が組み込まれる可能性が高く、WebKit公式ブログのアップデートを追うことが最初の一歩になる。

既存のデバッグフローへの組み込み方

AIデバッグは強力だが、いきなり全工程を任せるのではなく、まずは既存のCWV監視フローの補助として導入するのが現実的だ。たとえば、Search ConsoleでCLS悪化を検知したら、AIにSafari上でのCLS発生箇所の特定を依頼する。AIの提案を人間が評価し、問題なければ本番環境に適用するという段階的なアプローチが失敗を防ぐ。

また、AIの出力にはハルシネーション(もっともらしい誤情報)が含まれる可能性がある。特にCSSの修正提案は、Safariで意図通りに動作するかを必ず実機で確認するプロセスを残すべきだ。AIは検出と提案を高速化するが、最終的な品質保証は人間の役割である。

Safari MCP導入の3ステップ
STEP 1 Mac+MCP対応AIクライアントを用意しSafari Technology Previewをインストール
STEP 2 既存のCWV監視ツールと連携させ部分的な自動化から開始
STEP 3 AI提案の精度を評価した上で本番フローに組み込み定常運用へ
※ 最終的な品質確認は人間が行うプロセスを必須として残すこと

上記の3ステップは、あくまで現時点での想定に基づく。Safari MCPサーバーの正式リリース時に詳細なドキュメントが公開されるはずだ。WebKit公式ブログやApple Developerサイトの情報を定期的に確認し、最新の導入手順に従うことを推奨する。

この記事のポイント

  • Safari MCPサーバーはAIエージェントがブラウザ内部データに直接アクセスしデバッグを自動化する仕組みである
  • 米国で25%超のシェアを持つSafariの互換性問題をAIが解決することでSEOとCWVが大幅に改善する
  • MCPは業界標準プロトコルとしてWordPressやGoogle Search Consoleも対応しておりエコシステムが拡大している
  • 導入はMac環境とMCP対応AIクライアントから始め段階的に既存フローへ組み込むのが現実的な戦略だ
  • AIの提案を鵜呑みにせず最終的な品質確認は人間が行うプロセスを維持することが失敗を防ぐ鍵になる
WordPressのAllowed memory size exhaustedエラーの原因と直し方

WordPressのAllowed memory size exhaustedエラーの原因と直し方

WordPressの「Allowed memory size exhausted」エラーは、サーバーに十分な物理メモリがあっても発生する。64GBの専用サーバーで起こるのは、PHPのメモリ上限設定が実際の要求量を下回っているか、特定のプラグインやテーマがバグで際限なくメモリを消費し続けているからだ。まずは設定値の引き上げを試み、それで直らなければログから原因箇所を特定し対処する。

十分な物理メモリがあるのにエラーが起こる仕組み

十分な物理メモリがあるのにエラーが起こる仕組み

多くのレンタルサーバーはPHPのmemory_limitを128MBや256MBに設定している。WordPress本体や軽量なプラグインだけであればこの値で動作するが、WooCommerceの大規模ショップやページビルダー、画像処理、バックアップ系の処理が走ると一瞬で上限を突破する。コンソールに表示される「PHP Fatal error」の文言は、まさにその設定上限を突破したという意味だ。

さらに問題をややこしくしているのが、専用サーバーやVPSと「PHPの設定」の関係だ。64GBの物理メモリを搭載していても、PHPが使えるメモリ上限はOS全体の値ではなく、あくまでphp.iniwp-config.phpなどで個別に定義された数値が優先される。ハードウェアとソフトウェアの上限は別物だと理解しておく必要がある。

具体的なメモリ上限の引き上げ手順

具体的なメモリ上限の引き上げ手順

最も確実で直接的な方法はwp-config.phpファイルに一行追記することだ。FTPソフトやサーバーのファイルマネージャーでWordPressをインストールしたルートディレクトリにあるwp-config.phpを開き、次のコードを追記する。記述する場所は「/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */」という行の直前が望ましい。

Before(修正前)
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
After(修正後)
define('WP_MEMORY_LIMIT', '512M');
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

ここでは512MBを指定している。256MBで発生したエラーへの対応としては、まず256MBの2倍にあたる512MBを設定するのがセオリーだ。どうしても足りなければ1024M(1GB)や2048M(2GB)といった思い切った値も試して問題ないが、上限を上げすぎるとプログラムの暴走時にサーバー全体が重くなるリスクもある点は覚えておきたい。

サーバー側のphp.iniや.htaccessで設定を上書きする

共用サーバーではwp-config.phpへの追記だけで解決するケースがほとんどだが、VPSや専用サーバーではもっと根本の設定を見直したほうがいい。php.iniファイルを直接編集できる環境なら、memory_limit = 512Mと指定する。編集権限がない場合は.htaccessphp_value memory_limit 512Mを追記する方法もあるが、最近のPHPハンドラではこの形式が無効化されている場合がある。

メモリ上限を上げても直らない時の根本原因特定

メモリ上限を上げても直らない時の根本原因特定

メモリ上限を1GBなど潤沢な値に変更してもなお同じエラーが出るなら、特定のプラグインかテーマが無限ループやメモリリークを引き起こしている可能性が高い。質問の事例のように「worker」プラグイン(管理用バックアップツールの類)が409MBものメモリ割り当てに失敗しているなら、それはプラグインが実質的に処理不可能な大規模データを扱っているか、プラグイン自体のバグだ。

管理画面に入れなくても全プラグインを安全に止める方法

エラーが深刻でWordPress管理画面にアクセスできない時は、FTPやSSHで/wp-content/plugins/ディレクトリのフォルダ名を一時的に変更する。例えば「plugins」を「plugins_deactivate」にリネームすると、全プラグインが強制停止されて管理画面にアクセスできる状態に戻せる。エラーがこのタイミングで消えたのなら、停止したプラグイン群に原因がある。

STEP 1 FTPでサーバーに接続し、/wp-content/へ移動する
STEP 2 「plugins」フォルダを「plugins_deactivate」にリネームする
STEP 3 管理画面へアクセスし「プラグイン」を見ると、すべて停止を確認できる
STEP 4 原因の心当たりがあるプラグインだけフォルダ名を元に戻し、有効化して検証する
安全な停止手順

エラーログに記録された具体的なファイル名を手がかりにする

エラーログには「/wp-content/plugins/worker/src/MWP/Http/JsonResponse.php on line 21」のように、エラーを起こしているファイルと行番号が出力される。これはまさに問題のプラグインの内部コードだ。この情報を元に該当プラグインだけを停止し、それでも状況が変わらなければそのプラグインの公式サポートに報告するか、代替のプラグインを検討する。

またWordPressには「サイトヘルス」機能が標準搭載されており、管理画面にアクセスできれば「ツール」→「サイトヘルス」→「情報」タブ内でメモリ上限の現在値が確認できる。FTPで原因プラグインを停止させたら、ここで上限値が意図した通りに変更されているかも併せてチェックしておくと確実だ。

よくある質問

256MBで運用していたが、なぜ急にこのエラーが出たのか

プラグインやテーマのアップデートでコードの処理方式が変わり、消費メモリが増えた可能性が高い。またWooCommerceの商品登録数が増えたり、データベースの肥大化によって1回のクエリで扱うデータ量が閾値を超えたことも原因に挙げられる。

メモリ上限の設定が反映されているか確認する方法は

管理画面の「サイトヘルス」で確認するのが最も簡単だ。あるいは、ルートディレクトリにinfo.phpを作成しphp phpinfo();と記述してブラウザでアクセスする。表示された一覧の中の「memory_limit」の値を見れば、現在の上限が分かる。

プラグイン停止でデータは消えないのか

プラグインのフォルダ名を変更して停止するだけでは、データベースに保存された設定やコンテンツは一切消失しない。単にWordPressがそのプラグインを読み込まなくなるだけなので、フォルダ名を元に戻せば全く同じ状態で再開できる。

512MBまで上げたが足りるか心配だ

一般的なWordPressサイトであれば512MBで十分だが、複数の重量級プラグインが稼働する大規模サイトでは1GBを超える設定が必要になることもある。ただし上限が高すぎるとPHPプロセスがメモリを解放しないまま滞留するリスクもあるため、原因プラグインの特定を優先するのが安全だ。

この記事のポイント

  • PHPのメモリ不足エラーは物理メモリとは別の設定値で起こる
  • まずはwp-config.phpにWP_MEMORY_LIMITを定義して上限を引き上げる
  • 512MBに引き上げても直らないなら、プラグインのバグを疑う
  • 管理画面に入れない時はFTPでプラグインフォルダをリネームして強制停止する
  • エラーログに書かれたファイルパスから原因のプラグインを狙い撃ちする
WordPressで重大なエラーが発生した時の原因と復旧手順

WordPressで重大なエラーが発生した時の原因と復旧手順

WordPressで「このサイトで重大なエラーが発生しました」と表示され管理画面にもログインできない場合、まず試すべきはサーバーのエラーログ確認と、FTPを使った原因プラグインの強制停止だ。管理用メールが届かなくても、手動の切り分け作業でサイトを復旧できる。

なぜ「このサイトで重大なエラーが発生しました」と表示されログイン不能になるのか

なぜ「このサイトで重大なエラーが発生しました」と表示されログイン不能になるのか

あのメッセージが表示されるとき、WordPress内部ではPHPの「致命的エラー(Fatal Error)」が起きている。プログラムの処理がそこで停止してしまい、画面表示が途中で終わる。テーマやプラグインの更新失敗、PHPバージョンの非互換、サーバーのメモリ上限超過、あるいはコアファイルの破損など原因は多岐にわたる。

WordPress 5.2以降、致命的エラーが起きると管理画面へのログインも止められる設計になった。これは「壊れかけのサイトを操作し続けて被害を拡大させない」ための安全措置だ。通常なら「サイトに技術的な問題が発生しました。復旧手順のリンクを管理者メールアドレスに送信しました」という案内とともに「回復モード」用のリンクがメールで届く仕組みになっている。

ただ、このメールが届かないケースは実際には非常に多い。メールサーバーの設定不備や、そもそも通知を受け取る管理者アドレスが存在しないサイトもある。つまり「メールが届かない=打つ手がない」わけではない。手動での復旧手順を覚えておけば、すぐに対処できる。

管理用メールが届かなくてもエラーの原因を特定する手順

管理用メールが届かなくてもエラーの原因を特定する手順

原因を特定できないまま闇雲に操作すると、状況をさらに悪化させかねない。まずは「一体どのファイルの何行目で止まっているのか」という技術情報を掴む必要がある。

サーバーのエラーログを最優先で確認する

「重大なエラー」の原因は、ほとんどの場合サーバー上の「エラーログ」に明瞭に記録されている。エックスサーバー、ConoHa WING、さくらのレンタルサーバなど国内の主要レンタルサーバーなら、コントロールパネル内の「エラーログ」や「アクセスログ」といったメニューから確認可能だ。cPanel系であれば「Errors」アイコンから辿れる。

  • ログには「PHP Fatal error」という文言と、問題が起きたファイルのパス(/home/…/plugins/xxxx/xxxx.php on line 123 など)が刻まれている
  • ここでプラグイン名が明記されていれば原因はほぼ特定できたも同然だ
  • もしログの見方が分からない場合は、「エラーログをダウンロードして全文をテキストエディタで開き、Fatal で検索する」とよい

wp-config.php で WP_DEBUG を有効にしてエラーを画面表示させる

エラーログがすぐに見つからない・もしくはより直感的に原因を掴みたい場合は、WordPressのデバッグモードを有効にする。FTPソフト(FileZillaなど)か、サーバーのファイルマネージャーで WordPress インストールディレクトリ直下の wp-config.php ファイルに以下の行を追加する。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

この設定でエラー情報は /wp-content/debug.log に書き出される。ブラウザ上でサイトを再読込し、その後このログファイルを開けば、先ほどと同じように原因ファイルを特定できる。WP_DEBUG_DISPLAYtrue にすると画面に直接エラーが表示されるが、一般の訪問者にも見えてしまうので本番環境での使用は推奨しない。問題を解決したあとは false に戻すか、行ごと削除すること。

FTPやファイルマネージャーで原因のプラグインやテーマを強制停止する

FTPやファイルマネージャーで原因のプラグインやテーマを強制停止する

原因が特定のプラグインやテーマだと判明したら、管理画面に戻らなくても手動で無効化できる。管理画面を経由せず、ファイル名の変更で読み込ませないようにする手法だ。これでサイトの表示や管理画面へのアクセスが復活する。

STEP 1 サーバーのエラーログを確認する
STEP 2 wp-config.php に WP_DEBUG 設定を追記する
STEP 3 エラーメッセージから原因プラグインを特定する
STEP 4 該当プラグインをリネームして無効化する

原因プラグインのフォルダをリネームする

FTPソフトまたはレンタルサーバーのファイルマネージャーで、WordPress のインストール先に移動し、/wp-content/plugins/ ディレクトリを開く。エラーログに書かれていたプラグイン名と一致するフォルダを見つけて、名前を変更する。末尾に「_deactivated」や「_bk」などを付け足せばよい。

  • 変更前: problem-plugin
  • 変更後: problem-plugin_deactivated

WordPress はフォルダ名が一致しないプラグインを読み込まなくなる。結果、致命的エラーの原因が取り除かれ、サイトは無事に表示されるようになる。管理画面にも再びログイン可能になる。

すべてのプラグインを一括で疑う場合の方法

エラーログ上でプラグイン名が特定できないが、何らかのプラグインが原因であることは間違いない場合、/wp-content/plugins/ フォルダそのものをリネームしてしまう手もある。たとえば pluginsplugins_stop に変更すれば、すべてのプラグインが一括で無効化される。その状態で管理画面にログインできれば、原因はやはりプラグインなので、フォルダ名を元に戻し、管理画面から一つずつ有効化していく。テーマが原因と疑われる場合は、/wp-content/themes/ 以下の現在のテーマフォルダをリネームする。WordPress はテーマが存在しないとデフォルトテーマ(Twenty Twenty-Five など)に自動で切り替わる。

復旧後に必ずやっておくべき再発防止策

復旧後に必ずやっておくべき再発防止策

サイトが無事に表示され管理画面にも入れたら、そのまま運用を再開するのではなく、必ず以下の3つをチェックする。これで同じエラーが二度と起きにくくなる。

WordPress本体、テーマ、プラグインをすべて最新にする

致命的エラーは「古いソフトウェア」と「最新のPHPバージョン」の組み合わせで起きやすい。更新が止まっている長期放置プラグインが混ざっているなら、代替のメンテナンスされているプラグインへの移行を検討する。

PHPバージョンをサーバー管理画面で上げる

WordPress の推奨する PHP バージョンは常に上がっている。サーバーのコントロールパネルで PHP 8.1 以上に設定変更できるか確認する。変更後はサイト全体の動作確認を必ず行う。

WP_DEBUG の設定を本番環境で必ず解除する

wp-config.php にデバッグ設定を追加していた場合、必ず define( 'WP_DEBUG', false ); に戻すか、該当行を削除する。ログ出力を有効にしたまま運用すると、サーバーのディスク容量を圧迫し、別のトラブルを引き起こす。

よくある質問

管理画面の「回復モード」リンクがメールで届かない理由は

主な原因はサイトのメール送信機能そのものが正常に動いていないことだ。特に共用サーバーでは PHP の mail() 関数が制限されているか、WordPress の送信メールが迷惑メールフォルダに分類されている。SMTPプラグインなどで送信経路を信頼性の高いものに変えれば、次回以降の通知は確実に届くようになる。

WordPressログイン画面自体が表示されない場合の対処法は

管理画面へのアクセスすら致命的エラーで遮断されているという状態だ。まず前述の FTP を使ったプラグイン一括停止を試す。それでも改善しないなら、.htaccess ファイルの破損も疑って、ファイル名を .htaccess_bk に変更し、WordPress 管理画面の「設定」→「パーマリンク」で再生成させる。

FTPパスワードがわからないが復旧できるか

レンタルサーバーのコントロールパネルにログインできれば、多くの場合ブラウザ上で操作できる「ファイルマネージャー」が利用可能だ。FTPアカウントの情報が不明でも、ファイルマネージャーさえ使えれば全く同じ手順でプラグインフォルダのリネームができる。

すべてのプラグインを停止してもエラーが消えない

テーマが原因の可能性が高い。FTPで /wp-content/themes/ 以下の現在のテーマフォルダをリネームする。また、WordPress のコアファイルが破損していることもある。「ダッシュボード」→「更新」から WordPress の「再インストール」を実行すれば、コアファイルが上書き修復される。

WP_DEBUG を設定したが debug.log に何も記録されない

サーバー側で PHP エラーログの出力先が別に固定されているケースだ。その場合、レンタルサーバーのコントロールパネルに用意されている「エラーログ」機能に、より詳細な情報が出ている。そこを確認すれば解決の糸口がつかみやすい。また、wp-config.php の記述場所が /* That's all, stop editing! */ より上にあるかも確認する。

この記事のポイント

  • 「重大なエラー」はPHPの致命的エラーが原因で起こる
  • メールが届かなくてもサーバーのエラーログで原因を特定できる
  • FTPやファイルマネージャーでプラグインフォルダをリネームして停止する
  • 復旧後はPHPバージョンの確認とWP_DEBUGの解除が必須
PHP 8.4にしたらmodern-events-calendar-liteで翻訳読み込みエラーが出た時の対処法

PHP 8.4にしたらmodern-events-calendar-liteで翻訳読み込みエラーが出た時の対処法

PHP 8.4への移行直後にデバッグログへ記録された「_load_textdomain_just_in_time」の通知は、PHPのバージョンが原因ではない。WordPress 6.7で追加された新しい翻訳読み込み機構が、modern-events-calendar-liteプラグインの不適切な翻訳呼び出しを検出し、注意喚起しているだけだ。サイトの動作には影響しないが、デバッグモードを有効にしているとログを埋め尽くす。根本的な解決はプラグインのバージョンアップだが、更新が提供されていなければ数行のコードで通知を抑制できる。

なぜPHP 8.4への切り替え後にこの通知が現れたのか

なぜPHP 8.4への切り替え後にこの通知が現れたのか

実際のところ、PHP 8.4と翻訳読み込みの仕組みには直接の関係はない。今回の通知が突然ログに現れたのは、ふたつのタイミングが重なったためだ。ひとつは WordPress 6.7 で導入された「just-in-time翻訳読み込み」機能が、従来よりも厳密にプラグインのコードをチェックするようになったこと。もうひとつは、PHPのバージョンを上げるタイミングでデバッグモード(WP_DEBUG)を有効にした、もしくはデバッグログの出力先を確認したことだ。

つまり、PHP 7.4 の環境でも WordPress 6.7 以降であれば同じ通知は発生していた可能性が高い。PHP 8.4 にしたからといって、追加のエラーが生じたわけではないと捉える必要がある。デバッグログを初めて見たことで、以前から存在していた通知に気づいたという構図になる。

_load_textdomain_just_in_time通知の正体

_load_textdomain_just_in_time通知の正体

WordPress 6.7 では、翻訳ファイルの読み込みをできるだけ遅延させる「just-in-time翻訳」の仕組みが強化された。その中核を担うのが _load_textdomain_just_in_time という内部関数だ。この関数は、プラグインやテーマが本来「init」アクション以降に行うべき翻訳ファイルの読み込み(textdomainのロード)を、それより早い段階で実行しようとした場合に検知し、開発者向けの通知を発生させる。

表示されるエラーメッセージの日本語訳は「_load_textdomain_just_in_time 関数が正しく呼び出されませんでした。modern-events-calendar-lite ドメインの翻訳の読み込みが早すぎるタイミングで開始されました。」といった趣旨になる。これは「重大なエラー」ではなく「注意(Notice)」であるため、サイトの表示が崩れたり、機能が停止したりすることはない。

Before(通知が記録されている)
PHP Notice:  Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the modern-events-calendar-lite domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later.
After(通知が消えた)
-- デバッグログから当該通知がなくなり、本来のエラーだけが記録される --

上記のBefore/Afterのように、この通知を抑制すればデバッグログがすっきりし、本当に注意すべきエラーを見落としにくくなる。通知の表示自体はWordPress側の仕様変更によるものなので、PHP 8.4にしたからといって新たな不具合が混入したわけではないと理解しておこう。

翻訳読み込み通知を解消する手順

翻訳読み込み通知を解消する手順
STEP 1 プラグインの更新を確認する
STEP 2 更新がない場合はコードで通知を抑制する
STEP 3 デバッグログを確認する

プラグインの更新状況を確認する

まずは、modern-events-calendar-liteプラグインが最新版になっているか管理画面の「プラグイン」一覧から確認する。WordPress 6.7への対応が完了していれば、アップデートを適用するだけで通知は自然に消える。ただし、このプラグインはしばらく大きな更新がないケースもあり、執筆時点では修正が提供されていない可能性が高い。

更新が見つからない場合は次の手順に進む。開発元が対応しないあいだは、ユーザー側で通知を抑える方法を取らざるを得ない。

コードを追加して通知を抑制する

更新が提供されていない場合でも、WordPressのフィルターフックを使って、modern-events-calendar-liteに限って_load_textdomain_just_in_time」の通知を発生させないようにできる。具体的には、以下のコードをMUプラグイン(Must-Use Plugin)として配置する。

<?php
/**
 * Plugin Name: Suppress MEC Translation Notice
 * Description: modern-events-calendar-lite の翻訳読み込み通知を抑制する
 */
add_filter( 'doing_it_wrong_trigger_error', function( $trigger, $function_name, $message, $version ) {
    if ( '_load_textdomain_just_in_time' === $function_name && false !== strpos( $message, 'modern-events-calendar-lite' ) ) {
        return false;
    }
    return $trigger;
}, 10, 4 );

このコードは「doing_it_wrong_trigger_error」フィルターを利用し、問題の関数名とメッセージ内に当該プラグインのテキストドメインが含まれている場合のみ、通知のトリガーを無効にする。他のプラグインやコアの重要なお知らせには影響を与えないため、安全に使える。

設置方法は、wp-content/mu-plugins/ ディレクトリに任意の名前のPHPファイル(例: mec-translation-suppress.php)を作成し、上記コードを貼り付けるだけ。mu-plugins フォルダが存在しない場合は手動で作成する。MUプラグインを使うと、テーマの切り替えや通常のプラグイン管理の影響を受けず、恒久的にフィルターが適用される。

デバッグログを確認する

コードを追加したあと、再度サイトを表示したり、管理画面にログインし直したりすると、それ以降のデバッグログ(wp-content/debug.log)に当該通知が記録されなくなる。念のため、一度プラグインを無効化・再有効化するか、任意のページを表示してからログを確認すると確実だ。通知が消えていれば対処は完了。もし引き続き同じ通知が残っている場合は、ファイルの設置場所やコードの記述ミスを確認する。

よくある質問

この通知はサイトを停止させるのか

停止しない。WordPressの「Notice」レベルの出力であり、サイトの表示やプラグインの動作そのものにはまったく影響を与えない。デバッグモードが有効な環境でのみログに出力されるものなので、訪問者が目にすることもない。

PHP 8.4に戻したほうがいいのか

戻す必要はない。通知はPHPのバージョンに依存せず、WordPress 6.7の仕様に起因する。PHP 7.4はすでにセキュリティサポートが終了しているため、PHP 8.4を使い続けるほうが望ましい。今回の通知を理由にPHPのバージョンを下げるのは誤った判断だ。

他のプラグインでも同じ通知が出る可能性はあるか

十分にある。WordPress 6.7以降、翻訳の読み込みを「init」より前に行っている多くの古いプラグインやテーマで同様の通知が発生する。同じ仕組みで対処したい場合は、上記のコード内の「modern-events-calendar-lite」の部分を該当するテキストドメインに置き換えればよい。

通知を消すコードを使うとほかのエラーも隠れてしまうのか

今回紹介したフィルターは、関数名とメッセージ内容の両方で限定しているため、ほかの「doing_it_wrong」通知には影響しない。別のプラグインやWordPressコアが発する重要な警告は、従来どおりデバッグログに記録される。ただし、全体的な検証のために、テスト環境でコードの動作を確認してから本番に適用するのが安心だ。

この記事のポイント

  • PHP 8.4への切り替え後に出た翻訳通知は、PHPのバージョンが原因ではない
  • WordPress 6.7のjust-in-time翻訳機能が古いプラグインの不備を検出したもの
  • サイトの動作には影響せず、デバッグログに記録されるだけのNotice
  • プラグインの更新がなければ、フィルターコードで通知だけを抑制できる
  • 通知を抑制しても他の重要なエラーは引き続きログに残る