【WordPressマルチサイト】子サイトへデータを移行する

マルチサイト化した本番環境のWordPressの子サイトの一つへ、ローカル環境のWordPressを移行する方法。

  • 親サイト
    • 子サイト1 //ローカル環境をこちらへコピーする
    • 子サイト2
    • 子サイト3
    • ext

手順

ローカル環境のデータをエクスポートする

データベースのコピーはadminerを使用してエクスポートする。

サーバーのフォルダ群からはwp-contentフォルダをアップロードするので、ローカル環境からコピーしておく。

本番環境に子サイトを作成する

本番環境のマルチサイトにログインし、サイトネットワーク管理サイトへ移動し、新規追加をクリックする。

子サイトの情報を入力して、サイトを追加をクリックする。

子サイトのIDを確認する

本番環境のマルチサイトにログインし、サイトネットワーク管理サイトへ移動し、サイト一覧の中からさきほど作成した子サイト名をクリックする。

サイトを編集の画面へ遷移するので、ブラウザのアドレス欄を確認する。

https://XXXXXXXX/wp-admin/network/site-info.php?id=2

末尾のid=2がサイトIDなので、メモしておく。

本番環境にデータベースを移行する

本番環境のphpMyAdminへアクセスする。すると、テーブル接頭辞が2種類あるのが確認できる。WordPressを初めにインストールした時に使用したテーブル接頭辞mlt_と、さきほど子サイトを作成した時に自動的に追加されたテーブル接頭辞で、子サイトのIDである2が付与されたテーブル接頭辞mlt_2_である。

WordPressではマルチサイトにおいて、テーブル接頭辞を別にすることでテーブル領域を分割している。

さて、ローカル環境のデータベースのテーブル接頭辞はwp_である。このままではマルチサイトでは使用できないので、テーブル接頭辞を置換しなければならない。

  • wp_mlt_2_

まず、ローカルからエクスポートしたファイルを、本番環境のphpMyAdminへインポートする。

次に、wp_のテーブルと、mlt_2_のテーブルを比較する。

  • wp_
    • wp_commentmeta
    • wp_comments
    • wp_links
    • wp_options
    • wp_postmeta
    • wp_posts
    • wp_termmeta
    • wp_terms
    • wp_term_relationships
    • wp_term_taxonomy
    • wp_usermeta
    • wp_users
    • wp_ewwwio_images
    • wp_ewwwio_queue
  • mlt_2_
    • mlt_2_commentmeta
    • mlt_2_comments
    • mlt_2_links
    • mlt_2_options
    • mlt_2_postmeta
    • mlt_2_posts
    • mlt_2_termmeta
    • mlt_2_terms
    • mlt_2_term_relationships
    • mlt_2_term_taxonomy

ユーザー情報を格納しているwp_usermetawp_usersはmlt_2_には存在しないテーブルだということがわかる。wp_ewwwio_imageswp_ewwwio_queueはプラグインで追加されたテーブルである。

以上のことから、作業の流れをまとめる。

  1. mlt_2_をすべて削除する
  2. wp_usermetawp_usersを削除する。
  3. wp_mlt_2_へテーブル接頭辞を書き換える。

画像、テーマ、プラグインをサーバーへアップロードする

画像アップロード先

  • public_html
    • wp_content
      • uploads
        • sites
          • 2 //サイトID
            • 2022 //年月フォルダの場合

テーマアップロード先

  • public_html
    • wp_content
      • themes
        • seventyseventytwo など
        • //ここに格納

プラグインアップロード先

  • public_html
    • wp_content
      • pluguins
        • akismet など
        • //ここに格納

注意

  • 画像などのメディアは、サイトID名のフォルダの直下に格納する。一方。テーマやプラグインは通常の格納先で良い。

URLを書き換える

phpMyAdminのmlt_2_optionsを表示し、siteurlhome本番ドメイン+マルチサイトのサブディレクトリ名へ書き換える。

次にプラグインBetter Search Replaceを使用し、検索置換を行う。

置換元文字列と置換先文字列を入力し、テーブルを選択する。テーブルはmlt_2_のみ選択できる。

Run as dry runにチェックが入っているのを確認し、検索/置換の実行をクリックする。チェックが入っているとデータベースの検索が行われ、置換は行われない。

検索結果を確認し、問題なければチェックを外して、検索/置換の実行をクリックし、実際に置換を実行する。

ウィジェットのリンク置換は要注意

ブロックテーマが選択されていると、管理画面からウィジェット設定へのリンクがなくなってしまう。その影響なのかサイドバーに設置したウィジェットのリンクが、Better Search Replaceで置換を実行しても置換されなかった。

対策

  1. クラシックテーマ(親子とも)をサイトネットワークで有効化する。
  2. 子サイトでクラシックテーマの子テーマを有効化する
  3. ダッシュボードメニューにウィジェットが出現する
  4. Better Search Replaceで置換する
  5. ウィジェットも置換される

移行後に思わぬ挙動を発見した場合は、以下のことを確認する。

メディアが画像を認識していない時

プラグインMedia from FTPを使用して、画像とメディアの紐づけを行う。