WordPressサブディレクトリ環境でプラグイン管理画面が404になる原因と対処

WordPressサブディレクトリ環境でプラグイン管理画面が404になる原因と対処

WordPressサブディレクトリ環境でプラグイン管理画面が404になる原因と対処

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

なぜ管理画面のプラグインページが404になるのか

なぜ管理画面のプラグインページが404になるのか

WordPress の管理画面は通常 /wp-admin/ で始まるが、Bedrock(roots.io スタック)のようなカスタム構成では、コアファイルを /wp/ の下に配置する。管理画面の URL は /wp/wp-admin/ のようにサブディレクトリが一段深くなる。ここで、プラグインが管理画面へのリンクを作る際に「/wp-admin/ はルート直下にある」という前提でコードを書いていると、リンク先が https://example.com/wp-admin/... のようにサブディレクトリを反映しない形になり、フロントエンドで処理されて結果的に404になる。

これはコアファイルの場所を変更していない標準的なインストールでは表面化しない。Bedrock や独自に /cms/ などへ配置を変えているサイトで、かつプラグインが管理画面のパスをハードコード(直書き)している場合に限って起こる。エラーログには何も残らず、ただ「ページが見つかりません」と表示されるため、原因の特定に手間取ることが多い。

✕ エラー状態(Before)
プラグインが生成したURL(ルート相対)
/wp-admin/admin.php?page=milo-subscriptions#/payments
→ フロントエンドの /wp-admin/… を探しに行き404
✔ 修正後(After)
サブディレクトリを考慮した正しいURL
/wp/wp-admin/admin.php?page=milo-subscriptions#/payments
/wp/ が入り、管理画面として正常に開く

上記デモのとおり、プラグインが出力したパスに /wp/ が1つ欠けているために「そんなページはフロントエンドに存在しない」と判断され、404 が返っている。見た目はありふれた存在しないページへのアクセスと変わらず、管理画面の一部だけが突然消えたように感じる。

サブディレクトリ環境で発生する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制作領域のトラブルシューティングが専門 ・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標 ・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意 ・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

メッセージを残す