
The Events Calendarでカレンダー表示にならない原因と直し方
The Events Calendar でカレンダー表示(月表示)を設定しているのに、一覧(リスト表示)しか出てこない原因は、多くの場合「今後のイベントが存在しない」ことによるフォールバック動作だ。今後のイベントが1件もない場合、The Events Calendar は自動的に直近の過去イベントをリスト形式で表示する。そのため、設定を変えてもカレンダーが表示されず、タブ状の一覧だけが現れる。
カレンダー表示にならずリスト表示になるのはなぜか

この現象は、The Events Calendar プラグインが持つ「今後のイベントがない場合のフォールバック機能」により発生する。プラグインの仕様として、直近で開催予定のイベントがない状態で月表示ページにアクセスすると、デフォルトで「直近の過去イベント」がリストビューで表示される。したがって、カレンダーの月グリッドが見えないのは表示設定の不備ではなく、表示する「今後のイベント」がデータベース上に1件も存在しないことが根本原因だ。
管理画面のイベント設定や表示オプションをいくら変更しても、今後のイベントが0件であればリスト表示へのフォールバックが優先され、見た目は変わらない。特に「イベントを作成して公開したはず」と思っていても、日付が過去に設定されていたり、下書きのまま放置されていたケースが多い。
イベントが存在するのにカレンダーが出ない場合のチェックポイント

イベントの日付が過去になっていないか確認する
管理画面の「イベント」→「すべてのイベント」から各イベントの開始日時を確認する。日付が過去のものであれば、そのイベントは「今後のイベント」として認識されない。イベント編集画面で開始日を未来の日付に修正し、「更新」をクリックするだけで、カレンダー表示に反映される。
イベントの投稿ステータスが「公開済み」かを調べる
イベントが「下書き」や「非公開」のまま保存されていると、フロントエンドのカレンダーには表示されない。一覧画面でステータス列を確認し、公開済みになっていないイベントがあればステータスを「公開」に変更する。カレンダー表示に使われるのは公開済みのイベントだけだと覚えておく。
カテゴリページの表示設定を確認する
特定のイベントカテゴリページ(例:「学生向けイベント」カテゴリ)でリスト表示になってしまう場合、そのカテゴリに属する今後のイベントが存在しない可能性が高い。イベント編集画面で該当カテゴリを割り当てた未来イベントを最低1件作成する。カテゴリページの URL を直接確認し、月表示のクエリ文字列がついているかもあわせてチェックする。
テンプレートの上書きやテーマの干渉を調べる
The Events Calendar の表示テンプレートを子テーマやカスタムテーマで上書きしている場合、意図しないテンプレートファイルが読み込まれて月表示が無効化されることがある。特に `tribe/events/v2/month/` 配下のテンプレートファイルを触っていないか、`/wp-content/themes/使用テーマ/tribe-events/` ディレクトリの有無を FTP やファイルマネージャーで確認する。
根本原因かどうかを1分で見極めるテスト手順

この4ステップのテストでカレンダーが正常に表示されれば、根本原因は「表示すべき未来イベントの不在」だと特定できる。もしこれでも改善しない場合、プラグインの競合やテーマの上書きを疑い、別のトラブルシューティングに進む。
今後のイベントが0件でもカレンダーグリッドを強制的に表示させる方法

どうしても空のカレンダーグリッドを表示させたい場合は、`functions.php` にフィルターフックを追加するか、The Events Calendar のアドオン「The Events Calendar Pro」で追加されるカスタマイズオプションを利用する。無料版のまま対処するなら、`tribe_events_views_v2_use_period_for_request` フィルターを使ってフォールバックの挙動を変更できる場合があるが、これは将来のアップデートで動作が変わる可能性もある。
直近の過去イベントではなく「今後のイベントはありません」といったメッセージとともに空のカレンダーを出す運用がどうしても必要な場合は、子テーマのテンプレートを修正する方法が確実だ。
よくある質問
イベントは10件以上あるのにリスト表示のままなのはなぜか
すべてのイベントが過去日付で作成されている可能性が高い。イベント一覧で「開始日」の列を確認し、未来の日付が1件もない場合は、フォールバック機能によりリスト表示になる。1件でも未来の日付のイベントを公開すれば月表示に切り替わる。
特定カテゴリのページだけリスト表示になるのはなぜか
そのカテゴリに属する今後のイベントが存在していないためだ。カテゴリページでは、当該カテゴリに割り当てられた未来イベントが1件もないと、フォールバックでリスト表示に切り替わる。該当カテゴリを付与した未来イベントを作成すれば直る。
The Events Calendar で「月」表示をデフォルトに設定するにはどうすればよいか
管理画面の「イベント」→「設定」→「表示」タブにある「デフォルトのイベント表示」で「月」を選択する。ただしこの設定は今後のイベントが存在することが前提であり、未来イベントが0件の状態では設定にかかわらずフォールバックが作動する点に注意が必要だ。
メニューからカレンダーページに直接リンクしているのにリストが出るのはなぜか
URL が正しく `/events/month/` を指していても、表示する未来イベントがなければリスト表示のフォールバックが優先される。リンク切れや設定ミスではなく、データの問題だと判断してイベントの日付とステータスを確認するのが先決だ。
カレンダー表示が壊れているのか、フォールバック動作なのかを見分ける方法は
未来の日付で公開済みのテストイベントを1件作成し、フロントエンドで該当ページを再読み込みする。これで月グリッドが表示されればフォールバック動作だと確定できる。表示がまったく変わらない、あるいはレイアウトが崩れる場合はプラグインの競合やテーマの干渉を調べる必要がある。
この記事のポイント
- 今後のイベントが0件だと The Events Calendar はリスト表示にフォールバックする
- 未来日付で公開済みのイベントを1件作れば月表示に切り替わる
- カテゴリページでも同じフォールバック動作が発生する
- テーマのテンプレート上書きやプラグイン競合は二次的な原因にすぎない
- 空カレンダーの強制表示には子テーマやフィルターフックでの対応が必要
“`

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

PHP Warning Undefined array key value エラーの原因と直し方
WordPress で PHP 8.x 環境に移行した後、サーバーのエラーログに「Warning: Undefined array key」という警告が大量に記録されるようになった場合、最も確実な解決策は原因となっているプラグインを最新バージョンに更新することだ。この警告はいわゆる「Notice」より深刻度が一つ上の「Warning」だが、サイトの表面的な表示や動作が完全に停止する致命的なエラーではない。
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 の厳格な構文チェックに引っかかる。
$value = $field['value'];$value = $field['value'];エラーログを止める最も確実な方法「プラグインのアップデート」

WordPress で「Undefined array key」が特定のプラグイン(たとえば Directorist のようなディレクトリ系テーマ・プラグイン)で発生する場合、最優先で行うべきはそのプラグインのアップデートだ。成熟したプラグインであれば、開発チームがすでにコードを修正し、PHP 8.x 向けに配列キーの存在チェックを追加した新しいバージョンをリリースしている可能性が高い。
管理画面の「ダッシュボード」→「更新」画面から手動で更新するか、利用しているプラグインの公式サイトで最新バージョンがリリースされていないか確認する。自動更新が無効になっていると、修正パッチが適用されずにいつまでもエラーログが肥大化し続ける。サイトヘルス画面やサーバーのディスク容量を圧迫する前に手を打つべきだ。
すぐに警告を非表示にする「wp-config.php」の設定変更

プラグインの更新がまだ提供されていない、または何らかの理由で更新できない事情がある場合、サーバー設定ファイル wp-config.php を調整して警告を非表示にできる。ただしこれはあくまで対症療法であり、根本的なコードの修正ではないことを理解しておきたい。本番環境では、エラーを画面に表示させず、ログだけに記録する設定が原則だ。
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);上記の設定により、PHP の警告は画面に表示されなくなるが、/wp-content/debug.log には引き続き記録される。完全にログ出力自体をやめたい場合は WP_DEBUG を false にするが、別の問題が起きたときに原因究明が遅れるため、ログへの記録は有効にしたまま画面への表示を切る方法が現実的だ。
緊急時の応急処置としてコードを直接修正する

プラグインのアップデートがいつになるかわからず、かつデバッグ表示オフではカスタマイザー上での操作に支障が出るなどワークフロー上の問題がある場合、最終手段としてプラグインのソースコードを直接修正する手がある。
具体的には、配列のキーを読み込む前に、そのキーが存在するかチェックするか、PHP 7.0 から導入された Null 合体演算子(??)を使ってデフォルト値を与える。先の例でいえば、$field['value'] という部分を $field['value'] ?? '' に書き換えれば、キーが存在しない場合は空文字が代入され、警告は出なくなる。
value=""value=""この作業は必ず「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 合体演算子(??)を用いたコード修正は応急処置であり、アップデートで上書きされる前提で行う
- エラーログの肥大化を防ぎつつ、開発元へ報告することで結果的にエコシステム全体が改善される

・ 複数業界における17年間のデジタルビジネス開発経験
・ ウェブサイト開発のためのHTML、PHP、CSS、JavaScript等の実用的知識
・ 15ヶ国語対応の多言語SaaSの開発経験
・ 17年間にも及ぶ、Eコマース長期運営経験
・ 幅広い業界でのSEO最適化の豊富な経験

WordPressサイト全体にアクセスできなくなった時の原因と復旧手順
サイトにも管理画面にもまったくアクセスできなくなった場合、最初に確認すべきはサーバーのファイル構造とWordPressのインストールパスだ。外部からの不正アクセスを受けた後にページが表示されなくなる症状では、改ざんされたプラグインの残骸や、不完全に変更された設定ファイルが読み込みを妨げている可能性が高い。
なぜサイト全体にアクセスできなくなったのか
管理画面も含めてあらゆるページが表示されない状態は、WordPressの根幹となるファイルが破損しているか、サーバーがPHPを正しく処理できなくなっていることを意味する。特に不正アクセスを受けた後であれば、攻撃者が設置した不正なコードがセキュリティプラグインや手動の復旧作業によって一部だけ削除され、不完全な状態で残っている可能性が高い。
最も厄介なのは、WordPress本体のコアファイルや設定ファイルそのものが破損しているケースだ。テーマやプラグインの不具合であれば、それらを無効化することで少なくとも管理画面にはアクセスできるようになるが、コア破損ではそれすらも不可能になる。
不正アクセスからの復旧作業で起こりやすい副次的な破損
外部から侵入を受けた後、多くのユーザーはパスワード変更やソルトキーの更新、不審なプラグインの削除といった応急処置を行う。しかしこれらの作業中に誤って重要なファイルを削除してしまったり、修正が中途半端な状態で終わってしまったりすることがある。特にソルトキーを手動で更新した場合、wp-config.php内で閉じ引用符が欠落していたり、PHPの定数定義が壊れていたりすると、WordPress全体が読み込めなくなる。
最初に試すべき緊急アクセス手順

サイトが完全に応答しなくなった場合、まずはブラウザの問題ではなくサーバー側の問題であることを確認する。シークレットウィンドウで自分のサイトURLを開く、別の端末やネットワークからアクセスしてみる、example.com/readme.htmlのような静的なHTMLファイルが表示されるか試すといった切り分けが有効だ。静的なHTMLすら表示されないなら、DNS設定やサーバー自体の停止を疑う必要がある。
wp-config.phpを開き、文法ミスがないか確認する上記の手順で管理画面に到達できるようになれば、あとは管理画面からプラグインを1つずつ有効化して原因を特定し、テーマを正式に切り替えればよい。
wp-config.php の破損を確認する
ソルトキーを変更した直後にアクセス不能になったなら、wp-config.phpが最も疑わしい。このファイルはWordPressのルートディレクトリにあり、データベース接続情報や認証用のユニークキーを定義している。編集時にシングルクォートが1つ抜けている、余分な文字が混入している、PHPの開始タグ<?phpが欠落しているといった単純なミスで、サイト全体が真っ白になる。
サーバーのファイルマネージャーやFTPクライアントでwp-config.phpをダウンロードし、バックアップを取った上で内容を確認する。特にソルトキーを定義しているセクション(AUTH_KEYやLOGGED_IN_KEYなどが並ぶ部分)に注目し、各行がdefine('キー名', '値');の形式を正しく守っているか、閉じ括弧とセミコロンが揃っているかを1行ずつ検証する。不安があれば、WordPressの公式ソルトキー生成ページから新しいキーセットをコピーし、該当セクションを丸ごと置き換えるのが安全だ。
プラグインを強制的に全無効化する
管理画面にさえアクセスできない状態では、データベースを直接操作するか、FTPでプラグインフォルダの名前を変更することでプラグインを無効化する。手順はシンプルで、/wp-content/plugins/ディレクトリに移動し、その中にある全プラグインのフォルダ名の先頭に「_」や「disabled_」を付け加えるだけだ。例えばwordfenceを_wordfenceにリネームすれば、WordPressはそのプラグインを認識しなくなる。
この方法の利点は、プラグイン本体のファイルを削除せずに済むため、原因特定後にすぐ元の名前に戻して復元できることだ。大量のプラグインを1つずつリネームするのが面倒な場合は、pluginsフォルダ自体をplugins_backupにリネームし、空のpluginsフォルダを新規作成すると一括で無効化できる。
WordPress コアファイルを手動で上書きする
wp-config.phpに問題がなく、プラグインをすべて無効化しても症状が改善しない場合、WordPress本体のプログラムファイルが改ざんまたは破損している。攻撃者がwp-adminやwp-includesディレクトリに仕込んだバックドアが、不完全に削除されたまま残っているケースも多い。
対処法は、WordPress公式サイトから最新版の ZIP ファイルをダウンロードし、展開した中身をFTP経由でサーバーにアップロードすることだ。このとき絶対に上書きしてはいけないファイルが2つある。wp-config.php(サイト固有の設定)と/wp-content/ディレクトリ(テーマ・プラグイン・アップロードメディア)だ。これらを除くすべてのファイルとフォルダを上書きアップロードすることで、コアファイルだけがクリーンな状態にリセットされる。
サーバー側のエラーログを確認する方法

ここまでの手順で復旧しない場合は、具体的なエラー内容を把握する必要がある。ブラウザには「重大なエラーが発生しました」としか表示されないが、サーバーには詳細なエラーログが記録されている。レンタルサーバーの管理パネル(cPanelやカスタムコントロールパネル)で「エラーログ」や「error_log」という項目を探し、直近のエントリを確認する。
error_logファイル/wp-content/debug.log(WP_DEBUG有効時)エラーログには「PHP Fatal error」や「Allowed memory size exhausted」といった具体的な原因が記録されている。特に不正アクセス後によく見られるのが、改ざんされたファイルから呼び出された存在しない関数によるエラーや、不完全に削除されたコードの残骸による構文エラーだ。ログの内容を手がかりに、問題のファイルを特定して修正するか、該当プラグインを完全に削除する。
WP_DEBUG を一時的に有効化して詳細を表示する
サーバーのエラーログが見つからない場合は、WordPressのデバッグモードを有効にしてエラーを画面に直接表示させる。これはwp-config.phpに以下の定数を追加または変更することで実現できる。
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);WP_DEBUGをtrueにするとWordPressがエラーを表示するようになり、WP_DEBUG_LOGで/wp-content/debug.logにエラーが記録される。WP_DEBUG_DISPLAYをtrueにすると、ブラウザ上にもエラーメッセージが直接表示される。なお、作業が終わったらこれらの定数をfalseに戻すか削除すること。本番サイトでデバッグ表示を有効にしたままにすると、訪問者にもエラー内容が見えてしまいセキュリティリスクになる。
.htaccess ファイルの破損を疑う
不正アクセスの痕跡として、.htaccessファイルが改ざんされているケースも多い。このファイルはWebサーバー(Apache)の挙動を制御しており、ここに不正なリダイレクトルールやアクセス制限が書き込まれていると、サイト全体にアクセスできなくなる。
WordPressルートディレクトリの.htaccessをダウンロードしてバックアップを取り、一度ファイル名を.htaccess_backupに変更して無効化する。その後、WordPress管理画面の「設定」→「パーマリンク設定」で「変更を保存」をクリックすれば、クリーンな.htaccessが自動生成される。ただし管理画面にアクセスできない現状では、以下の内容で新規に.htaccessを作成してもよい。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressこれでサイトが表示されるようになれば、原因は.htaccessの改ざんだったと特定できる。旧ファイルは内容を精査し、不審な行(知らないドメインへのリダイレクトや、怪しいIPアドレスからのアクセス許可ルールなど)がないか確認してから削除する。
バックアップからの復元がうまくいかない場合の対処

サーバー会社のサポートからバックアップ復元を提案されたが失敗したという状況は、バックアップデータ自体が破損しているか、復元先の環境に不整合があることを示している。特に多いのが、バックアップを上書き復元した後にデータベースの接続情報が古いままになっているケースだ。
バックアップ復元後にサイトが表示されない場合、まずwp-config.php内のデータベース名・ユーザー名・パスワード・ホスト名が、現在のサーバー環境と一致しているか確認する。バックアップが別のサーバーや別のデータベースインスタンスの情報を持ったまま復元されると、WordPressはデータベースに接続できず「データベース接続確立エラー」を返す。
もうひとつの可能性は、バックアップに不正アクセス後の改ざんファイルが含まれていたケースだ。攻撃を受けた後の状態をバックアップしてしまい、それを復元しても問題が再発するだけという悪循環に陥っている。この場合、バックアップからwp-content/uploads/(メディアファイル)とデータベースのダンプファイルだけを取り出し、WordPressのコアファイルとプラグインは公式のクリーンなファイルで置き換える方法が有効だ。
よくある質問
FTPの接続情報がわからない場合はどうすればよいか
多くのレンタルサーバーでは、契約時に送られてくる「サーバーアカウント情報」メールにFTPのホスト名・ユーザー名・パスワードが記載されている。見つからない場合はサーバーの管理パネルにログインし、「FTPアカウント」や「ファイルマネージャー」の項目から確認できる。管理パネル自体にログインできない場合は、サーバー会社のサポートに連絡してFTP情報を再発行してもらう必要がある。
「このサイトで重大なエラーが発生しました」のメールが届いたが確認できない
WordPress 5.2以降では、サイトに致命的なエラーが発生すると管理者メールアドレスに自動通知が届く。このメールには「リカバリーモード」へのリンクが含まれており、クリックするとプラグインを無効化した状態で管理画面にログインできる。メールが届いていない場合は、サーバーのPHPバージョンが古くてメール送信機能が動作していない、または管理者メールアドレスが間違って設定されている可能性がある。
不正アクセスを受けた後、どのプラグインを疑うべきか
攻撃者は多くの場合、更新が長期間止まっている脆弱なプラグインや、公式リポジトリ以外から入手したnulledプラグイン(正規ライセンスを回避した改変版)を経由して侵入する。/wp-content/plugins/内で更新日時が不自然に新しいファイル、プラグイン名とは無関係なファイル名(config.bakやabout.phpなど)が紛れ込んでいないか確認する。また、長期間更新されていないプラグインは、たとえ攻撃の経路でなかったとしても今後のリスクになるため、代替プラグインへの移行を検討すべきだ。
すべて試しても復旧しない場合の最終手段は
サーバー上の全ファイルをローカルにバックアップし、データベースをエクスポートした上で、WordPressを新規インストールする。その後、エクスポートしたデータベースのうちwp_posts(投稿・固定ページ)とwp_postmeta(カスタムフィールド)、wp_options(サイト設定)のテーブルだけをインポートし直す。この方法ではテーマやプラグインの設定の一部が失われる可能性があるが、コンテンツを救出できる可能性が最も高い。作業前には必ず現状の完全バックアップを取っておくことが大前提だ。
この記事のポイント
- 管理画面もサイトも表示されない場合、まずは静的なHTMLファイルが表示されるか確認し、問題の切り分けを行う
wt-config.phpの文法ミスやプラグインの強制無効化、.htaccessのリセットで多くのケースが解決する- 不正アクセス後はコアファイルが改ざんされている可能性があるため、
wp-content以外をクリーンなファイルで上書きする - バックアップ復元に失敗したら、データベース接続情報の不一致やバックアップ自体の破損を疑う
- エラーログやWP_DEBUGで具体的なエラー内容を特定し、根本原因に対処するのが最も確実な復旧手順である

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

WordPressサブディレクトリ環境でプラグイン管理画面が404になる原因と対処
WordPress をサブディレクトリに置いている環境で、一部プラグインの管理画面にアクセスすると「ページが見つかりません(404)」になる。これはプラグイン内部で作られた管理画面の URL が、実際のディレクトリ構造と合っていないのが主な原因だ。プラグインの更新で修正されることが多く、一時的に URL へ正しいパスを手動で加えればすぐに操作を再開できる。
なぜ管理画面のプラグインページが404になるのか

WordPress の管理画面は通常 /wp-admin/ で始まるが、Bedrock(roots.io スタック)のようなカスタム構成では、コアファイルを /wp/ の下に配置する。管理画面の URL は /wp/wp-admin/ のようにサブディレクトリが一段深くなる。ここで、プラグインが管理画面へのリンクを作る際に「/wp-admin/ はルート直下にある」という前提でコードを書いていると、リンク先が https://example.com/wp-admin/... のようにサブディレクトリを反映しない形になり、フロントエンドで処理されて結果的に404になる。
これはコアファイルの場所を変更していない標準的なインストールでは表面化しない。Bedrock や独自に /cms/ などへ配置を変えているサイトで、かつプラグインが管理画面のパスをハードコード(直書き)している場合に限って起こる。エラーログには何も残らず、ただ「ページが見つかりません」と表示されるため、原因の特定に手間取ることが多い。
上記デモのとおり、プラグインが出力したパスに /wp/ が1つ欠けているために「そんなページはフロントエンドに存在しない」と判断され、404 が返っている。見た目はありふれた存在しないページへのアクセスと変わらず、管理画面の一部だけが突然消えたように感じる。
サブディレクトリ環境で発生する404の一時的な回避策

プラグインのアップデートを待たずに、今すぐ該当画面を操作したい場合は、ブラウザのアドレスバーで404になった URL を直接編集する。たとえば /wp-admin/ の直前に、自分の環境で実際に使っているサブディレクトリ名(Bedrock なら /wp/)を挿入して再度アクセスすれば、多くの場合そのまま画面が開く。修正後の正しいパスは /wp/wp-admin/admin.php?page=... の形になる。
この操作はあくまで一時しのぎで、管理画面内の他のリンクも同じ問題を抱えている可能性がある。ページを移動するたびに手動で URL を直すのは現実的ではないため、根本的な解決にはプラグインの修正が必要になる。
プラグインのアップデートで完全に解決する

この種の不具合は、プラグインが WordPress 標準の関数(admin_url() など)を使わずにパスを決め打ちで書いてしまったために起こる。開発者がこの問題に気づけば、次のバージョンで修正されるのが一般的だ。実際、今回の事例の Milo Subscriptions でも、内部の管理画面リンクを WordPress が返す正しい URL から組み立て直す修正がバージョン 1.8.7 で適用された。まずは管理画面の「プラグイン」から当該プラグインの更新がないか確認し、最新版が提供されていれば即座に適用する。
更新がすぐに提供されていない場合でも、問題が発見された後のバージョンでは修正されていることが多い。プラグインの公式ページの「Changelog(変更履歴)」に “Fix admin URLs on subdirectory installs” のような記載があれば、それを当てるだけで解決する。
恒久的な修正のためにプラグイン開発者へ報告する

まだ修正されていないプラグインで同じ症状が出るなら、サポートフォーラムや公式リポジトリの Issues で「サブディレクトリ構成だと管理画面のリンクが404になる」と具体的に伝えるのが最も建設的だ。報告の際は、自分の WordPress が /wp/ や /cms/ などのサブディレクトリにインストールされていること、問題が起こる画面の URL、使っているテーマや主要プラグインのバージョンを添えると、開発者が原因を特定しやすい。サブディレクトリ環境に限ったバグはテストで見落とされやすいため、利用者からの報告がなければ長期間放置される可能性がある。
よくある質問
サブディレクトリへ WordPress をインストールするのは特別なのか
標準的な構成であっても、WordPress 本体を /wp/ や /cms/ といったサブディレクトリに置くことは公式にも認められた設定だ。Bedrock や一部のセキュリティ寄りのスタックは、コアファイルをルートから分離する目的でこの構造を採用している。ただし、プラグインやテーマの開発者が標準構成だけを想定してテストしていると、今回のようなパス解決のミスが残りやすい。
サブディレクトリ環境だと他にどんな不具合が起きるのか
管理画面のリンク切れ以外にも、REST API や Ajax のエンドポイントが見つからずに動作が止まるケースがある。たとえば画像の一括処理やリアルタイム検索が動かなくなることがある。いずれも WordPress が提供する URL 取得関数(rest_url() や admin_url())を使わずにパスを直書きしていることが原因だ。
自分でプラグインのコードを修正してもよいのか
管理画面のリンクをすぐに直す必要があるなら、プラグインの該当ファイルを子テーマやカスタムプラグインで上書きできれば対処できる。ただし、元のプラグインが更新されると上書きが無効になるため、恒久的な対応としては推奨しない。一時しのぎと割り切ったうえで、開発者へのフィードバックとセットで行うのが現実的だ。
Bedrock 以外の構成でも同じ問題は起こるのか
WordPress を /wp/ 以外の任意のディレクトリ(/cms/ /admin/ など)に配置している場合、まったく同じ仕組みで発生する。また、マルチサイトのサブディレクトリ構成でも、特定の管理画面リンクが正しく生成されないことがある。原因の構造は共通しているため、対処の考え方は変わらない。
この記事のポイント
- サブディレクトリ環境ではプラグインの管理画面リンクが404になることがある
- 原因はプラグインがパスをルート相対でハードコードしていること
- 一時的には URL へ正しいサブディレクトリを手動で挿入すればアクセスできる
- プラグインの最新版を確認し、修正があればすぐに更新する
- 修正がまだなら開発者へ具体的な環境情報を添えて報告する

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

WordPress REST APIの400エラーを解決する原因と対処法
WordPressの管理画面でウィジェットの更新や新規ページの公開ができず、REST APIの400エラーが発生する場合、まずW3 Total Cacheの設定とプラグイン同士の干渉を疑う。W3 Total CacheがREST APIのリクエストに干渉してエラーを引き起こすケースが多いため、オブジェクトキャッシュとデータベースキャッシュを一時停止して症状が改善するかを確認するのが最も早い切り分けになる。
REST APIの400エラーが起きる原因は何か

WordPress 4.7以降、管理画面の多くの操作はREST APIを通じて行われる。ウィジェットの更新、固定ページの保存、ブロックエディターのオートセーブなどだ。このAPIのエンドポイントにリクエストを送った際、サーバーが「400 Bad Request」を返すということは、送信されたデータの形式やヘッダー情報に不備があるとサーバーが判断したことを意味する。
ただ、実際には送信データそのものに問題がなくても、プラグインがリクエストの内容を改変したり、キャッシュ機構がAPIのレスポンスを破損させたりして400エラーが発生することが多々ある。特に、W3 Total Cacheのような全ページキャッシュ・オブジェクトキャッシュ・データベースキャッシュを一括して扱うプラグインでは、キャッシュの設定ミスや競合が原因で管理画面の動作に支障をきたしやすい。
ウィジェット更新 → 400 Bad Request
固定ページ公開 → 400 Bad Request
投稿保存 → 200 OK
ウィジェット更新 → 200 OK
固定ページ公開 → 200 OK
上記の図は、投稿だけが正常に動作し、固定ページとウィジェットだけが400エラーになる典型的な症状を示している。これは、投稿の保存パスと他の管理画面パスで異なるキャッシュルールが適用されている可能性を示唆する。
また、管理画面そのものへのキャッシュ適用や、サーバーレベル(cPanel)でのキャッシュ層、セキュリティプラグインによるREST APIアクセス制限も、同様の400エラーを引き起こす。原因は複合的なこともあるため、順を追って切り分ける必要がある。
REST APIエラーを解決する手順

W3 Total Cacheのキャッシュを段階的に無効化する
第一に、W3 Total Cacheの管理画面(「パフォーマンス」→「一般設定」)から、各キャッシュモジュールを一つずつ無効化して症状が改善するか確認する。すべて一気にではなく段階的に止めることで、どのキャッシュ機能がエラーの原因になっているかを特定できる。
W3 Total Cacheの「一般設定」で「オブジェクトキャッシュ」のチェックを外して保存
同様に「データベースキャッシュ」のチェックを外す
ページキャッシュ、ミニファイも停止し、症状が改善するかテストする
各ステップで設定を変更したあとは、W3 Total Cacheの「すべてのキャッシュをクリア」を実行してから、問題の操作(固定ページの公開やウィジェットの更新)を試す。もしオブジェクトキャッシュまたはデータベースキャッシュを停止した段階で問題が解消するなら、それらのキャッシュ方式が使用しているバックエンド(MemcachedやRedis)との通信に問題があるか、cPanel環境で利用できるリソースに制限がかかっている可能性が高い。
管理画面ページをキャッシュ対象から除外する
W3 Total Cacheのページキャッシュ設定には、キャッシュ対象から外すURLパターンを指定する項目がある。管理画面のパス(/wp-admin/)がキャッシュされてしまうと、ノンス(セキュリティトークン)の不整合が起こり400エラーを引き起こす。
「パフォーマンス」→「ページキャッシュ」→「高度な設定」→「キャッシュしないページ」に以下のパターンを追加する。
/wp-admin/
/wp-login.php
/wp-json/それでも改善しない場合は、W3 Total Cacheの設定ファイル(通常は/wp-content/w3tc-config/以下)に直接手を入れる方法もあるが、管理画面からの設定で解決することがほとんどだ。cPanelの「ファイルマネージャー」からFTPアカウントを使ってアクセスできる。
テーマとプラグインの干渉を調べる
Catch Boxのような無料テーマでも、プラグインとの特定の組み合わせでREST APIのリクエストに余計なデータを付加してしまうケースがある。W3 Total Cacheの設定変更だけで解決しない場合は、プラグインの一括無効化による切り分けを行う。
すべてのプラグインを無効化し、デフォルトテーマ(Twenty Twenty-Fiveなど)に切り替えた状態で問題が再現するか確認する。これでエラーが消えるなら、一つずつプラグインを有効化していき、どのプラグインがトリガーになっているかを特定する。特定後は、そのプラグインのREST API関連の設定を見直すか、代替プラグインを検討する。
ブラウザの開発者ツールでエラーの詳細を確認する
ChromeやFirefoxの開発者ツール(F12キー)を開き、「ネットワーク」タブでウィジェット保存時や固定ページ公開時のリクエストを観察する。400エラーが返ってきたリクエストをクリックすると、サーバーから返されたレスポンスボディに具体的なエラーメッセージが含まれていることがある。
例えば、「無効なパラメーター」「cookie nonce is invalid」などのメッセージが確認できる。これにより、キャッシュによるノンス不整合なのか、リクエストパラメーターの欠落なのかをより正確に判断できる。また、ブラウザのコンソールタブにJavaScriptエラーが出ている場合も、それらを併せて確認する。
再発を防ぐための恒久的な設定

原因となったキャッシュ機能を一時停止して問題が解決した場合、そのまま無効にし続けるとサイト表示速度に影響が出る。恒久的な対策としては、W3 Total Cacheのオブジェクトキャッシュやデータベースキャッシュを再び有効化した上で、管理画面のURLパターンをキャッシュ対象から明示的に除外する設定を施す。
また、cPanelからPHPのバージョンやメモリ制限も確認しておく。多くのレンタルサーバーでは、PHPのメモリ制限が256MBに設定されているが、W3 Total Cacheの一部機能はそれ以上のメモリを消費することがある。PHPの設定でmemory_limitを512MB程度に引き上げられるなら引き上げておくと、予期せぬキャッシュ破損やプロセス停止を避けやすくなる。
よくある質問
REST APIエラーはサイトのフロントエンドにも影響するか
通常、REST APIの400エラーは管理画面の操作に限られることが多い。ただし、フロントエンドでWordPressのREST APIを利用した動的な機能(リアルタイム検索や読み込みボタンなど)を使っている場合は、来訪者が同様のエラーに遭遇する可能性がある。
キャッシュプラグインをすべて停止しても直らない場合はどうするか
サーバーレベル(cPanel)のキャッシュ(Varnishなど)が動作している可能性がある。cPanelに「キャッシュマネージャー」や「サイトパフォーマンス」がある場合は、そちらも一時的に無効化して検証する。また、mod_securityなどのセキュリティモジュールがREST APIのリクエストをブロックしているケースもあるため、ホスティング会社のサポートに確認する必要がある。
同じ症状でプラグインがW3 Total Cache以外の場合はどう切り分けるか
WP Super CacheやLiteSpeed Cacheなど、他のキャッシュプラグインでも同様の干渉が起きることがある。切り分け手順は共通で、いったん全プラグインを無効化してから、キャッシュプラグインだけを先に有効化して問題が再現するかを見る。再現すればそのプラグインの設定を調整する。
ブラウザのコンソールに「nonce」関連のエラーが出ている
ノンスエラーは、キャッシュによって管理画面の古いHTML(古いセキュリティトークンを含む)が表示されてしまう場合に起きる。ページキャッシュの除外設定で/wp-admin/ディレクトリ全体をキャッシュ対象から外し、W3 Total Cacheの「クエリ文字列をキャッシュする」設定を無効化すると解消しやすい。
この記事のポイント
- REST APIの400エラーはW3 Total Cacheの設定が主な原因になりやすい
- オブジェクトキャッシュとデータベースキャッシュから段階的に停止して切り分ける
- 管理画面のURLをキャッシュ対象から除外してノンス不整合を防ぐ
- テーマや他プラグインとの干渉がないか全無効化で確認する
- cPanelのPHPメモリ制限やサーバーレベルキャッシュも併せて点検する

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

AvadaとComplianzでGravity Formsが表示されない時の解決法
AvadaテーマとComplianzの組み合わせで、クッキー同意前にGravity Formsのフォームが表示されない問題は、ComplianzがAvadaの必須設定スクリプト(fusion-lightbox-js-extra)をマーケティングスクリプトと誤判定しブロックするのが原因だ。Complianzの設定を変更し、このスクリプトをブロック対象から除外すれば解決する。
なぜComplianzがAvadaのスクリプトをブロックするのか(原因)

ComplianzはGDPRなどのプライバシー規制に対応するため、事前の同意なしに個人データを収集する可能性のあるスクリプトを自動で検出し、ブロックする。Avadaのfusion-lightbox-js-extraは、ライトボックス機能で使用する設定値(fusionLightboxVars)をページに埋め込むための必須の設定スクリプトだ。
しかしこのスクリプトの中に、SNS共有用のURLの一部としてLinkedInのURLが含まれている場合、Complianzのスキャナーが「LinkedInのマーケティングスクリプトではないか」と誤って分類してしまう。結果としてスクリプトのtype属性がtext/plainに書き換えられ、ブラウザがJavaScriptとして実行しなくなる。Gravity Formsの表示に必要なfusionLightboxVarsが定義されず、後続のJavaScriptがエラーになるというのが根本的な原因だ。
var fusionLightboxVars = { … };
</script>
var fusionLightboxVars = { … };
</script>
このデモは、Complianzが誤検出した際のスクリプトタグの変化と、除外設定後の正常な状態を比較したものだ。
ComplianzでAvadaのスクリプトをブロック対象から除外する手順
上記の手順は、Complianzの設定画面から行える最も安全で公式な対処法だ。各STEPの詳細を順に説明する。
スクリプトセンターで「Avada Fusion Builder」統合を有効にする
Complianz Free 7.5.0以降では「スクリプトセンター」内に「サードパーティとの統合」というセクションがあり、主要なテーマやプラグイン向けのプリセット設定が用意されている。ここで「Avada Fusion Builder」を有効にすると、ComplianzはAvadaのコアスクリプトをマーケティングカテゴリから除外し、必須スクリプトとして扱うようになる。
この設定によってfusion-lightbox-js-extraのブロックが解除され、fusionLightboxVarsが正しく定義されるため、Gravity Formsの表示エラーは解消する。もしこの統合が既に有効なのに問題が続く場合は、次の手順を試す。
特定のスクリプトをURL指定で除外する
統合を有効にしても問題が解決しない場合、該当のスクリプトをComplianzのスクリプトブロックから直接除外する方法がある。Complianzの「スクリプトセンター」には「URLを指定してブロック除外」という項目があり、ここに除外したいスクリプトのパスを追加する。
具体的には/wp-content/themes/Avada/assets/min/js/library/jquery.flexslider.jsもしくは/wp-content/plugins/fusion-builder/配下のスクリプトを除外リストに追加する。これによって該当のJSファイルがComplianzのブロック対象から完全に外れ、クッキー同意前でも実行されるようになる。
除外設定を追加したら、必ずシークレットウィンドウ(プライベートブラウジング)で動作を確認する。通常のブラウザでは既にクッキー同意済みの状態がキャッシュされているため、問題の再現確認にはシークレットモードが必須だ。
Complianzのフィルターフックでスクリプトのカテゴリを変更する方法(上級者向け)

特定のインラインスクリプトをComplianzのスクリプトブロックから除外する、より精密な方法として、Complianzが提供するフィルターフックを使う手がある。この方法は、スクリプトを誤分類から守りつつ、他のスクリプトのブロック機能は維持したい場合に有効だ。
テーマのfunctions.phpに除外フィルターを追加する
子テーマのfunctions.phpに以下のコードを追加することで、fusion-lightbox-js-extraのスクリプトハンドルをマーケティングカテゴリから外し、必須スクリプト(functionalカテゴリ)として扱える。
add_filter('cmplz_script_class', function($class, $total_match, $found) {
if ($found === 'fusion-lightbox-js-extra') {
return 'cmplz-native'; // 必須(functional)カテゴリとして扱う
}
return $class;
}, 10, 4);このフィルターはComplianzがスクリプトをスキャンする段階で動作し、指定したハンドル名(ここではfusion-lightbox-js-extra)を持つスクリプトの分類をcmplz-nativeに上書きする。cmplz-nativeは必須カテゴリ扱いとなり、クッキー同意前でもブロックされずに実行される。
コードを追加した後は、必ずサイトのキャッシュをクリアし、シークレットウィンドウで動作を確認する。また、Complianzの管理画面で「スクリプトセンター」→「スクリプトを再スキャン」を実行すると、変更が即座に反映される。
他のAvadaスクリプトが同様にブロックされる場合の追加対処

fusion-lightbox-js-extra以外にも、Avadaの他のスクリプトが同じ理由でブロックされるケースがある。特にfusion-video-js-extraやfusion-flexslider-js-extraといった-js-extraで終わるインラインスクリプトは、SNS共有URLを含むことが多く、同様に誤判定される可能性が高い。
ブラウザの開発者ツール(F12)でコンソールを開き、「is not defined」で終わるエラーが他に出ていないか確認する。もし複数のAvada変数が未定義になっている場合は、該当するスクリプトハンドルをすべてComplianzの除外対象に追加するか、前述のフィルターフックで一括して必須カテゴリに振り分ける。
恒久的な対策としては、Complianzの「スクリプトセンター」→「Avada Fusion Builder」統合が正式にこれらのスクリプトをカバーするよう、Complianz側のアップデートを待つのも一手だ。とはいえ、テーマとプラグインの両方を常に最新版に保つことで、多くの互換性問題は徐々に解消される。
よくある質問
Avada統合を有効にしても直らないのはなぜか
ComplianzのバージョンやAvadaのビルドによっては、統合機能がfusion-lightbox-js-extraまでカバーしていない場合がある。その場合はURL指定の除外かフィルターフックを併用する。また、キャッシュプラグインやCDNが変更前のスクリプトを配信し続けている可能性もあるため、すべてのキャッシュをクリアしてから再度確認する。
クッキー同意後はフォームが表示されるのに、同意前だけ出ないのはなぜか
まさに今回の問題の典型例だ。Complianzは同意前にマーケティングカテゴリのスクリプトをブロックする。Avadaのスクリプトが誤ってマーケティングカテゴリに分類されているため、同意前はブロックされ、同意後に初めて実行される。除外設定でこの誤分類を修正すれば、同意前でもフォームが表示されるようになる。
Gravity Forms以外のプラグインにも影響は出るのか
fusionLightboxVarsが未定義になると、Avadaのライトボックス機能全体が破綻する。そのためライトボックスに依存するあらゆる要素(ポップアップ、モーダルウィンドウ、Ajax読み込みのフォームなど)が影響を受ける可能性がある。Gravity Forms以外にも、ポップアップメーカーやモーダル系のプラグインを使っている場合は同様の症状が出ることがある。
Complianzの代わりに他のクッキープラグインを使うべきか
必須ではない。Complianzは無料版でも柔軟な除外設定が可能であり、問題のスクリプトを適切に除外すればAvadaとの共存に支障はない。GDPR対応のためのスクリプト管理機能は他のプラグインでも同様の誤検出リスクがあるため、移行するよりも現在の環境で正しく設定する方が効率的だ。
フィルターフックのコードを追加しても反映されない場合は
まずComplianzの「スクリプトセンター」で「スクリプトを再スキャン」を実行する。それでもダメなら、キャッシュプラグインの全クリアとCDNのパージを行う。また、cmplz_script_classフィルターの優先度(第三引数の10)を9999に上げると、他の処理より後に実行されて確実に上書きされる。
この記事のポイント
- ComplianzがAvadaの必須スクリプトをLinkedInマーケティングスクリプトと誤判定しブロックするのが原因
- Complianzの「スクリプトセンター」でAvada Fusion Builder統合を有効にするのが最も簡単な解決策
- 統合で直らない場合はURL指定除外かフィルターフックで該当スクリプトを必須カテゴリに振り分ける
- 修正後は必ずシークレットウィンドウで動作を確認し、キャッシュのクリアを忘れずに行う

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

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

WordPress のブロックエディタ(Gutenberg)で編集画面を開いたときに真っ白なページしか表示されない現象は、大きく分けて 2 つの原因で発生する。1 つはプラグインやテーマの競合、もう 1 つは PHP の致命的エラー(「このサイトで重大なエラーが発生しました」と表示される類のもの)だ。
ブロックエディタは JavaScript を多用する高度な画面であり、複数のプラグインが読み込むスクリプト同士で競合が起きると、画面の描画が完全に停止してしまう。またテーマが古い jQuery や独自のエディタ拡張をロードしている場合も、エディタの初期化処理と衝突して空白画面を引き起こす。
PHP の致命的エラーが原因の場合は、エディタ画面そのものが生成される前に処理が中断されている状態だ。たとえばメモリ不足や、特定のプラグインが要求する PHP 拡張機能の不足、あるいは functions.php に記述された独自コードの文法ミスなどが該当する。こうしたエラーは管理画面全体に影響する場合もあるが、投稿編集画面だけが重い処理を要求するタイミングで発覚することも多い。
複数のプラグインやテーマが読み込むスクリプトが衝突し、エディタの初期化が止まる
メモリ不足・プラグインの不具合・functions.php の記述ミスなどで画面生成前に停止
セキュリティプラグインやサーバー設定が WordPress の REST API 通信を遮断している
プラグインとテーマの競合を切り分ける手順

まず最初に試すべきは、プラグインの全無効化と標準テーマへの切り替えだ。この手順だけで多くの白紙エディタ問題は解決する。管理画面にアクセスできる状態であれば、以下の流れで原因を特定できる。
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 〜」なら関数の未定義が原因だと絞り込める。
「Allowed memory size of 〜 bytes exhausted」→ wp-config.php で
define('WP_MEMORY_LIMIT', '256M'); を追加「Call to undefined function 〜」→ 該当のプラグイン/テーマを最新版に更新するか無効化
debug.log が空、または Notice/Warning のみ → PHP エラーは原因ではない
ブラウザの開発者ツールで JavaScript エラーを確認する

PHP のエラーログに何も記録されていない場合、JavaScript の実行時エラーが原因でエディタが空白になっている可能性が高い。この場合はブラウザの開発者ツールを使う。
Chrome の場合、編集画面を開いた状態でキーボードの F12 キーを押して開発者ツールを起動し、「Console」タブを選択する。赤いエラーメッセージが表示されていれば、それがエディタの読み込みを止めている原因だ。Uncaught TypeError や Uncaught 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 エラーも確認する

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

WooCommerce 決済手数料が大文字IDで効かない時の直し方
WooCommerce で「Checkout Fees for WooCommerce」などのプラグインを使い、支払い方法ごとに手数料を設定しているのに、特定の決済ゲートウェイだけルールがまったく反応しない。大文字を含む ID を持つ決済方法でこの症状が出ているなら、プラグイン内部の ID 比較処理で大文字と小文字が一致せずに無視されている可能性が高い。functions.php に1行のフィルターフックを追加するだけで即座に解消する。
なぜ特定の決済方法だけ手数料や割引が適用されないのか

Checkout Fees for WooCommerce は、支払い方法の ID をキーにして「どのゲートウェイに手数料をのせるか」を管理している。設定画面でルールを保存するとき、プラグインは WordPress の sanitize_key() 関数を通して ID をすべて小文字に変換し、データベースに格納する。ところが実際のチェックアウト画面で選択された決済方法の ID を取得する段階では、この小文字化(正規化)が行われない。
その結果、もともと ID が小文字のみで構成されているゲートウェイ(例 wc_zibal)は、保存値と取得値が同じ文字列になるため問題なく動く。一方で WC_Sep_Payment_Gateway や WC_Gateway_TorobPay のように大文字を含む ID の場合、保存された wc_sep_payment_gateway というキーと、実際にチェックアウト時に渡される WC_Sep_Payment_Gateway という文字列が一致せず、該当するルールが「存在しない」と判定されてしまう。
手数料設定が反応しない原因を視覚的に理解する

wc_sep_payment_gatewayWC_Sep_Payment_Gatewaywc_sep_payment_gatewaywc_sep_payment_gatewayfunctions.php にフィルターフックを追加して即座に解決する手順

プラグイン本体のコードを直接編集しなくても、子テーマの functions.php に数行のコードを追加するだけでこの問題は修正できる。以下のフィルターフックは、チェックアウト時に渡されるゲートウェイ ID を sanitize_key() で小文字に揃え、プラグインが正しくルールを照合できるようにする。
追加するコード
add_filter( 'alg_wc_add_default_gateway_on_cart', function ( $gateway ) {
return sanitize_key( $gateway );
} );このフィルターフックは、プラグインが決済ゲートウェイの ID を参照する直前に割り込み、ID を小文字だけの文字列に変換する。もともと小文字のゲートウェイには何の影響も与えず、大文字を含む ID だけが正規化される。コードを追加したあとは、WooCommerce のシステムステータス画面から Transients(一時データ)を削除するか、WP Rocket や W3 Total Cache などのキャッシュプラグインを使っているなら全キャッシュのクリアを忘れない。
どうしても functions.php を触りたくない場合の代替手段
コードの追加に抵抗がある場合、Code Snippets プラグインをインストールして同じコードをスニペットとして登録する方法も有効だ。管理画面の「スニペット」→「新規追加」から上記のコードを貼り付け、「サイトのフロントエンドで実行」を選択して有効化すれば、テーマファイルを直接編集せずに済む。
決済ゲートウェイごとの手数料が今後も安定して動くようにするために

このバグは Checkout Fees for WooCommerce の無料版に限らず、同様の仕組み(sanitize_key で保存し、未正規化の ID と比較する)を持つ他の手数料系プラグインでも発生しうる。ID に大文字を使う決済ゲートウェイは海外のプロバイダーに多く見られ、特に中東やアジア圏のローカル決済サービスを WooCommerce に追加している場合に遭遇しやすい。
根本的にはプラグイン開発元が比較処理の前段で正規化を実装することが望ましいが、今回紹介したフィルターフックを適用しておけば、プラグインのアップデート後も変更が上書きされる心配はほぼない(functions.php または Code Snippets に追加したコードはプラグイン更新の影響を受けない)。
また、新しく決済ゲートウェイを追加したときにも同じ問題が起きるか事前にチェックする習慣をつけると、売上に直結するチェックアウト画面のトラブルを未然に防げる。テスト用の注文を入れて手数料が正しく加算されるか、割引が適用されるかを確認しておく。
よくある質問
この修正は Checkout Fees for WooCommerce の有料版でも必要か
本記事執筆時点では、無料版と有料版でゲートウェイ ID の正規化ロジックに違いは確認されていない。有料版でも同様に大文字混在の ID でルールが動作しなくなる場合があるため、症状が出たら同じフィルターフックを試して問題ない。
すべて小文字の ID しか使っていないが、念のためコードを追加しても害はないか
sanitize_key() はすでに小文字の文字列には何も変更を加えない。もともと正常に動いている環境にコードを追加しても、挙動が変わることは一切なく、安全に設置できる。
functions.php を編集したら画面が真っ白になった
PHP の構文エラーが原因で「このサイトで重大なエラーが発生しました」と表示されることがある。コードの貼り付け位置やセミコロンの抜けを確認する。FTP やホスティングのファイルマネージャーで functions.php を開き、追加したコードをいったん削除して復旧させてから、Code Snippets プラグイン経由で再度追加するほうが安全だ。
カスタマイズしたコードがプラグインのアップデートで消えたりしないか
子テーマの functions.php に書いたコードや Code Snippets プラグインに登録したスニペットは、プラグイン本体のアップデートとは完全に独立して保存される。アップデートのたびに再設定する必要はない。
別の手数料プラグインでも同じ現象が起きるか
ゲートウェイ ID を sanitize_key() で保存し、比較時に正規化していないプラグインであれば、同様の不具合が起こる。WooCommerce の決済ゲートウェイ関連プラグインは広くこの設計パターンをとっており、大文字を含む ID を持つ決済手段を導入したとたん手数料が効かなくなる、という報告は定期的に見られる。
この記事のポイント
- 大文字を含む決済ゲートウェイ ID で手数料が効かないのは、保存時と取得時の文字列の不一致が原因
- functions.php に1行のフィルターフックを追加すれば、即座に大文字・小文字の差を吸収できる
- コード編集が不安なら Code Snippets プラグインを使うと同じ修正を安全に適用できる
- プラグインのアップデートや新しい決済手段の追加時に備えて、テスト注文での動作確認を習慣化する

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

WooCommerce 10.8.4 でチェックアウトエラーが出た時の原因と直し方
WooCommerce をバージョン 10.8.4 にアップデートしたあとチェックアウト時に「billingAddress.address.country の値が無効」というエラーが出る場合、決済時の国コードの受け渡しに問題が起きている。まずはバージョンを 10.8.2 に戻してチェックアウトが正常に動くか確認し、並行して住所フィールドのカスタマイズ状況やプラグイン競合の調査に着手するのが最短の解決ルートだ。
チェックアウトの国コードエラーはなぜ起きるのか

WooCommerce 10.8.4 ではチェックアウトブロック(Store API)の住所バリデーションが強化され、Stripe 決済時に送信される国コードの整合性チェックがより厳密になった。請求先住所の国フィールドが空だったり、ISO 3166-1 alpha-2 形式(JP、US など2文字)以外の値が渡されたりすると「billingAddress.address.country should be one of the following strings: …」というエラーが発生する。
具体的には、前のバージョンまでは許容されていた空文字やデフォルト値の扱いが 10.8.4 でエラー扱いに変わった可能性が高い。実際に 10.8.2 へのロールバックでエラーが消えたという報告も、このバリデーション変更がトリガーであることを示している。
また、下記のような要因が重なるとエラーが顕在化しやすい。
- チェックアウト画面で国選択フィールドを非表示にするカスタマイズを施している
- 自動住所入力プラグイン(Yamato や Japan Post 連携など)が国コードを正しくセットできていない
- デフォルトの販売国設定(WooCommerce → 設定 → 一般)が無効な値になっている
- 子テーマの functions.php でチェックアウトフィールドを加工しているが、国フィールドの扱いが抜けている
チェックアウトエラーを解消する3つの方法

エラーを即時に止めるにはバージョンを戻すのが確実だが、根本原因を潰して 10.8.4 を使い続ける場合は以下の手順で対処を進める。
エラーが表示されている状況を Before、修正後にチェックアウトが完了する状態を After として切り分け、各ステップで状況がどう変化するかを見極めていく。
STEP 1「ロールバックでエラーを緊急停止させる」
チェックアウトが完全に止まって売上に影響が出ているなら、先に WooCommerce を 10.8.2 へ戻す。WP Rollback プラグインを使うか、公式リリースアーカイブから手動で上書きする。ロールバック後にチェックアウトが正常化すれば、原因が 10.8.4 の変更にあると確定できる。
STEP 2「エラーログから欠落している値を特定する」
WooCommerce の「ステータス → ログ」で Stripe 関連のエラーログを調べる。障害が発生した時刻付近のログを開き、country フィールドに何がセットされていたか(空文字、undefined、配列など)を確認する。合わせて「WooCommerce → 設定 → 一般」の販売国と通貨が正しく設定されているかもチェックする。販売国が意図せず空欄や「ZZ」などの無効な値になっていると、チェックアウトブロックが国コードを解決できずにエラーになる。
STEP 3「国フィールドのカスタマイズを洗い出して修正する」
チェックアウト画面で国フィールドを非表示にしている場合、非表示でもデフォルトで「JP」が送信されるようにする必要がある。具体的には、woocommerce_checkout_fields フィルターで ‘class’ を操作しているなら ‘default’ 値も同時に指定する。
自動住所入力プラグインを使っている場合は、該当プラグインが WooCommerce 10.8.4 に対応しているか開発元に確認する。一時的にプラグインを無効化し、手動で国を選択した場合にエラーが消えるなら、プラグイン側の値の受け渡し不具合が原因だ。
Stripe のバリデーションは ISO 3166-1 alpha-2 の厳密な2文字コードを要求する。「JPN」などの3文字コードや日本語表記が混入している場合は、コード変換の処理を挟むか、そもそもコードが混入しないようにする。
WooCommerce 10.8.4 で国フィールドの値を正規化する設定例

チェックアウトブロックで国フィールドを非表示にしつつ、デフォルト値を正しくセットするには次のようなコードを子テーマの functions.php に追加する。これは WooCommerce の標準フィルターフックを使った基本的な対処だ。
add_filter( 'woocommerce_checkout_fields', function( $fields ) {
// 請求先住所の国フィールドを非表示にしつつデフォルト値を「JP」に固定
$fields['billing']['billing_country']['default'] = 'JP';
$fields['billing']['billing_country']['class'][] = 'hidden';
return $fields;
});チェックアウトブロック(Store API)で同じ挙動を期待する場合は、woocommerce_store_api_checkout_update_order_from_request アクションで国コードを強制的にセットする方法もある。ただし、ブロック版チェックアウトはフィールド制御の仕組みが従来のショートコード版と異なるため、プラグインでの対応が追いついていないケースも多い。動作確認は必ず実際のブロックチェックアウト画面で行う。
WooCommerce Blocks とクラシックチェックアウトの違いに注意する

WooCommerce 10.8.x 系ではチェックアウトブロックが標準化され、従来の [woocommerce_checkout] ショートコードとは住所フィールドの内部処理が大きく変わった。特に住所の構造が「address_1」「address_2」「city」「state」「postcode」「country」に正規化されており、カスタムフィールドがこれに準拠していないと Store API がエラーを返す。
もしショートコード版チェックアウトに戻してエラーが消えるなら、使用しているテーマやプラグインがチェックアウトブロックに未対応の可能性が高い。一時的に従来のチェックアウトに切り替えて運用を続け、その間に対応版を待つのも現実的な選択肢だ。
よくある質問
WooCommerce 10.8.4 に上げたあと国コードエラーが出るが、ロールバック以外にすぐできる対処はあるか
WooCommerce → 設定 → 一般 で「販売国」が正しく選択されているか確認する。空欄や無効な値の場合、チェックアウトブロックが国コードを解決できずにエラーになる。日本向けサイトなら「日本」を選択し、保存してからチェックアウトを再テストする。
エラーログにはどのような情報が記録されているのか
WooCommerce → ステータス → ログ で「stripe-…」で始まるログファイルを開くと、Stripe へのリクエスト内容とレスポンスが記録されている。country フィールドが空や null、あるいは想定外の型で送信されていれば、ここにエラー詳細が残っている。
自動住所入力プラグインを無効化したらエラーが消えた。どうすればよいか
そのプラグインがチェックアウトブロックに対応していない可能性が高い。プラグイン開発元に対応状況を問い合わせるか、チェックアウト画面を従来のショートコード版に切り替えて運用を継続する。プラグイン側のアップデートを待つ間の暫定策として有効だ。
子テーマでチェックアウトフィールドをカスタマイズしている。何をチェックすべきか
functions.php 内で woocommerce_checkout_fields フィルターを使っている場合、請求先住所の ‘billing_country’ に ‘default’ と ‘value’ が正しく設定されているか確認する。フィールドを非表示にしている場合は特に、内部的に有効な国コードが渡るよう ‘default’ を明示する。
WooCommerce Blocks のチェックアウトをショートコード版に戻す方法は
チェックアウトページの編集画面を開き、チェックアウトブロックを削除して、代わりにショートコードブロックを追加し [woocommerce_checkout] と入力する。ページを更新後、実際の画面で住所入力から決済まで一通りテストする。
この記事のポイント
- WooCommerce 10.8.4 の国コードバリデーション強化がエラーの直接原因
- 緊急時は 10.8.2 へロールバックし、並行してエラーログを解析する
- 国フィールドの非表示や自動入力プラグインがエラーを誘発しやすい
- チェックアウトブロックとショートコード版の動作差異も切り分けの鍵
- 根本対処ではデフォルト国コード「JP」の明示的な指定が有効

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

WordPressでPHP致命的エラーがobject-cache.phpに発生した時の直し方
WordPress で「Call to a member function get() on null」という PHP の致命的エラーが object-cache.php で発生する場合、原因はオブジェクトキャッシュプラグイン(SQLite Object Cache)の初期化失敗にある。PHP バージョンアップグレード後に必要な PHP 拡張機能(sqlite3、igbinary、apcu 等)が有効でないことが主な引き金だ。緊急復旧にはプラグインの無効化とキャッシュファイルの削除を、恒久対策には拡張機能の有効化とプラグインの再設定を行う。
このエラーが起きる根本的な原因

対象のエラーは WordPress の起動シーケンスのごく初期段階で発生する。wp-settings.php が wp_start_object_cache() を呼び出す際、SQLite Object Cache プラグインが WP_Object_Cache クラスのインスタンスを生成しようとする。ここで PHP の sqlite3 拡張がロードされていない、あるいはデータベースファイルへの書き込み権限がないなどの理由でコンストラクタが失敗すると、null が返る。その後の処理で null に対して get() メソッドを呼び出そうとして致命的エラーに至る。
スタックトレースを見ると wp_cache_get → wp_load_alloptions → get_option → wp_check_invalid_utf8 → esc_html とエスカレーションしている。これはオブジェクトキャッシュが機能しない状態で、WordPress が初期設定値(blog_charset 等)を取得しようとする過程で表面化した二次的なエラーだ。根はあくまでキャッシュ層の初期化失敗にある。
とくに PHP を手動またはホスティング側でアップグレードした直後に顕在化しやすい。新しい PHP バージョンでは過去に有効だった拡張機能がデフォルト無効になっていたり、パスが変わっていたりするため、プラグインの前提条件が崩れる。
サイトを即時に復旧させる手順

まずは管理画面にアクセスできない状態を脱する必要がある。エラーが object-cache.php の読み込み時に起きて WordPress 全体が停止するため、管理画面経由でのプラグイン停止は不可能だ。FTP またはサーバーのファイルマネージャーを使う。
上記の手順でキャッシュ関連ファイルが除去され、WordPress はデフォルトのキャッシュ機構にフォールバックして起動する。この状態では速度面での最適化は失われるが、少なくともサイトは表示され管理画面にも入れる。緊急避難として有効な手段だ。
恒久的にエラーを解決する方法

一時しのぎで復旧したあとは、SQLite Object Cache プラグインを正常に動作させるための根本対応を行う。PHP 8.4 で必要な拡張機能を確認し、サーバー設定を見直す。
PHP 拡張機能が有効か確認する
レンタルサーバーの管理パネルから PHP 設定を開き、sqlite3 拡張にチェックが入っているか確認する。多くのサーバーでは PHP バージョンごとに拡張のオンオフを切り替えられる。バージョンアップ時にデフォルト設定がリセットされ、sqlite3 が外れていることがよくある。
さらにパフォーマンスを引き出すために igbinary と apcu も有効にしておくと良い。igbinary はデータをバイナリ形式でシリアライズしてキャッシュ容量を節約し、apcu は PHP のユーザーキャッシュとしてメモリ上にデータを保持する。いずれも SQLite Object Cache プラグインが内部的に使用する。
プラグインを再インストールして設定する
先の手順でプラグインフォルダを削除した場合は、WordPress 管理画面から「プラグイン」→「新規追加」で SQLite Object Cache を検索し、再インストールする。有効化すると自動的に object-cache.php が wp-content 直下に再生成される。
有効化後、プラグインのステータス画面で「接続が確立されている」旨の表示が出れば正常だ。もしエラーが再発するようなら、wp-content ディレクトリのパーミッションが適切か(通常 755 または 775)も確認する。
自動読み込みオプションを整理する
質問の状況では自動読み込みオプション(autoloaded options)が 10MB に達していた。これは標準の数百 KB に比べるとかなり大きく、キャッシュ構築時にメモリを圧迫してエラーを誘発する一因になりうる。不要なオプションを整理することで、オブジェクトキャッシュの初期化負荷を下げられる。
長期運営サイトでは、過去にインストールして削除したプラグインの設定値が wp_options テーブルに残り、自動読み込みフラグがオンのまま放置されていることが多い。WP-CLI が使える環境なら wp option list --autoload=yes --format=table で一覧を取得し、不要なものを wp option delete で削除する。あるいは Advanced Database Cleaner のようなプラグインで掃除する方法もある。
再発を防ぐための設定ポイント

PHP バージョンアップ時には事前にステージング環境でプラグイン互換性をテストしておくのが理想だ。しかし実際には共有サーバーで本番一発のバージョンアップが行われるケースも多い。そうした環境では、少なくとも次の3点をルーティン化しておくと安全だ。
- PHP 拡張機能の有効リストをバージョンアップ前後で比較する
- object-cache.php の存在とプラグイン状態をアップグレード直後に確認する
- 自動読み込みオプションのサイズを定期的に監視し肥大化を防ぐ
sqlite3 拡張 無効 → オブジェクトキャッシュ初期化失敗 → サイト全体停止
sqlite3 拡張 有効 → キャッシュ正常稼働 → サイト表示速度も改善
このデモのとおり、PHP アップグレード直後は拡張機能の設定がリセットされてエラー状態に陥りやすい。事前に必要な拡張機能リストを控えておき、アップグレード後に同じ設定を復元する手順を習慣化することで再発を防げる。
よくある質問
管理画面にも入れず FTP も使えない場合はどうすればよいか
レンタルサーバーのファイルマネージャー(cPanel 等)から直接 wp-content にアクセスし、object-cache.php とプラグインフォルダを削除する。これで WordPress が起動できるようになる。どうしても操作できない場合はサーバー会社のサポートに依頼して該当ファイルの除去を代行してもらう。
SQLite Object Cache をやめて別のキャッシュプラグインに移行してもよいか
もちろん問題ない。Redis Object Cache や Memcached など、サーバーが対応している別の永続オブジェクトキャッシュを使う選択肢もある。ただし Redis や Memcached はサーバー側でデーモンを起動する必要があるため、共有サーバーでは使えないことも多い。その点 SQLite Object Cache はファイルベースで動くため導入障壁が低い。
object-cache.php だけ削除してプラグインは残しても大丈夫か
一時的な復旧としては有効だが、プラグインを再有効化すると object-cache.php が自動再生成され、拡張機能の問題が解決していなければ同じエラーが再発する。恒久対応としては必ず PHP 拡張機能を有効にしてから再インストールする必要がある。
自動読み込みオプションが 10MB を超えるのは異常なのか
かなり大きい部類に入る。通常のサイトでは数百 KB から高くても 2〜3MB 程度だ。10MB になるとキャッシュ初期化時のクエリ負荷が無視できず、メモリ制限の低い環境ではエラーの遠因になる。定期的な整理が推奨される。
SQLite Object Cache プラグインの代替手段はあるか
同プラグインはファイルベースの永続キャッシュとして優秀だが、もし拡張機能周りで繰り返し問題が起きるなら、WP Super Cache や W3 Total Cache のようなページキャッシュ系プラグインと、Transients のデータベース管理を組み合わせて代替する手もある。ただしオブジェクトキャッシュのパフォーマンスメリットは一部犠牲になる。
この記事のポイント
- PHP の致命的エラーは object-cache.php の初期化失敗が原因で起きている
- sqlite3 拡張機能が無効になっていることが最大の引き金
- 緊急復旧には object-cache.php とプラグインフォルダの削除が有効
- 恒久対策では PHP 拡張機能の再有効化とプラグイン再インストールを行う
- 自動読み込みオプションの肥大化もエラーを誘発するため定期的な整理が必要

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている
