WordPressのマルチサイトで、子サイトのURLを親サイトのものに変更する

日々雑感

とあるサブディレクトリ型マルチサイトで、子サイトを親サイトとして(親サイトのURLで)公開したい、ということがありました。
つまり、仮にURLが「https://sample.com/child/」の子サイトだとして、それを「https://sample.com/」にするわけですが、もちろん管理画面からの操作だけではできません。
なぜ最初から親サイトで構築しなかったのか…?は不明なのですが、とにかくトライしてみました。

まず、WordPress本体が/wp/ディレクトリ内にインストールされており、ドキュメントルートにindex.phpがあるという良くある状態だったので、「https://sample.com/wp/」でも親サイトにアクセス可能(アクセス直後にhttps://sample.com/ に転送されますが)であることを考えると、親サイトのURLを「https://sample.com/wp/」に設定できれば「https://sample.com/」の席が空くので、それを子サイトに設定できそうです。

そこで、phpMyAdminでDBの編集です。
マルチサイトのテーブルは、例えば親サイトが「wp_xxx」「wp_yyy」といったものだとすると、最初の子サイトは「wp_2_xxx」「wp_2_yyy」、その次に作った子サイトは「wp_3_xxx」「wp_3_yyy」というように連番でテーブルが作成されます。
ともあれ、まずは親サイトのパスが設定されているテーブルを探ってみると、どうやら

  • wp_blogs
  • wp_options
  • wp_site

の3つのようでした。
これらのテーブル内の値の「https://sample.com/」を全て「https://sample.com/wp/」に変更し(取り返しがつかなくならないよう、バックアップしてから)、WordPressの管理画面を更新すると…できました!

URLが変わるので管理画面から強制的に一度ログアウトさせられますが、無事「https://sample.com/wp/wp-admin/」にログインできました。

続いて、件の子サイトのパスを「https://sample.com/」に設定するわけですが、これは管理画面からあっさりできました。
「サイトネットワーク管理」の「サイト」で、子サイトの「サイトアドレス (URL)」を「https://sample.com/child/」から 「https://sample.com/」に変更し、「変更を保存」ボタンをポチッと…。

以上で、無事「https://sample.com/」で子サイトが表示されるようになり、管理画面にも問題なくログインできました。
まあ実際には途中もう少し試行錯誤があったのですが…、まずはできて良かった良かった、ということで。

【追記 20.02.26】 子サイトのURLを設定する際、上記の 「サイトアドレス (URL)」 に加えて、「設定」タブの「Home」も「 https://sample.com/」にする必要があります。また、「Siteurl」の方は元のまま「https://sample.com/child/」にしておかないと、全ての子サイトの管理画面にログインできなくなります(ちょっとハマりました)。