WordPress のシングルインストール(普通にインストールしてあったサイト)のコンテンツから何からをまとめてマルチサイトの子サイトとしてマイグレーションする方法。
普通のWordPressの移行の方法とほとんど同じで差があるところは、
- url が変わる
- uploads/ ディレクトリのパスが変わる( uploads/sites/
site_id
)になる - users と usermeta がマルチサイトの親サイトに統合される
の3点です。
今回は、3点目は手動でなんとかすることにして、1, 2 をぱぱっとやる手順についてまとめます。example.jp
というサイトを example.com/ja
に移行するとすると以下のようになります。
- マルチサイトを用意して、子サイトを作る
- 子サイトのIDを把握する。以下、サイトIDは2だったとして進めます
- シングル側でDBをダンプする(wp_users, wp_usermeta はしない)
- ダンプしたDBに対して、以下の置換を行う
example.jp
->example.com/ja
/wp-content/uploads/
->/wp-content/uploads/sites/2/
`wp_
->`wp_2_
(バックティックを含めると事故が少ない)
themes/
,plugins/
ディレクトリを移すuploads
ディレクトリをwp-content/uploads/sites/2/
に移す- マルチサイト側にインポートする
これでできます。作業中なので他にも何かあったら更新していきたいと思います。
コマンドで置換する
sed コマンドを使います。
cat ./prod-single-sub.sql \ | sed -e 's/https:\/\/example.jp/http:\/\/example.com\/ja/g' \ | sed -e 's/http:\/\/example.jp/http:\/\/example.com\/ja/g' \ | sed -e 's/example.jp/example.com\/ja/g' \ | sed -e 's/`wp_/`wp_2_/g' \ | sed -e 's/\/wp-content\/uploads\//\/wp-content\/uploads\/sites\/2\//g' \ > ./dev-multi-sub.sql
wp-cli で、特定のテーブルのみをエクスポートする
3の wp_users, wp_usermeta を排除するには、次のようにするとよいです。
wp db export prod-single-sub.sql --tables=wp_commentmeta,wp_comments,wp_links,wp_options,wp_postmeta,wp_posts,wp_term_relationships,wp_term_taxonomy,wp_termmeta,wp_terms
--tables
でどのテーブルを対象にするのかが決められるのですね。
コメント