この記事は種類別のエクスポート・インポートの作業記録であり、2つのデータベースを自動で安全にマージする方法ではありません。
WordPressでのWeb制作において、サイトの状態をまるっと移行できるAll-in-One WP Migrationは特に重宝するツールです。

新規サイトを1から作っていて、クライアントさんから途中で過去のデータベースを使いたい等の要望が発生した時に、非常に困ることがあります。
サイト全体の復元と、既存サイトへ投稿を追加するインポートは別の処理です。
SQLに強ければ、コマンドを叩いて結合できるかもしれませんがバックエンドの操作が苦手な場合は、個別の種類ごとにデータをエクスポートして、結合する方法があります。
本記事では新規サイトに過去のサイトのデータを結合する方法を紹介いたします。
WordPressで新規サイトに過去のサイトのデータを結合する方法
今回は新規サイトをフルスクラッチ(1から作成)していて、途中で昔のサイトのデータを結合して欲しいという依頼を想定しています。
実際にSWELLのテーマでその対応をしてみました。
その記録です。
昔のサイトのデータを使って対象のサイトを構築する
旧サイトと制作中の新サイトをそれぞれ退避し、両方から独立した統合作業用の仮サイトを用意します。以下では「新サイト」はデータの追加元、「対象サイト」は旧サイトを復元した仮サイトを指します。仮サイトのメール送信・決済・外部同期を止め、外部公開を制限してください。
スタートは昔の方のサイトのデータをAll-in-One WP Migrationを使って移行します。
この状態から新規サイトのデータを移植するという方法を取ります。
データベース以外のデータを移行する
当時はAll-in-One WP MigrationとUnlimited Extensionを使い、新サイト側で次のファイル用バックアップを作りました。DB除外は通常の完全移行とは異なります。現在の選択肢は公式のエクスポート設定で確認してください。
データベースをエクスポートしない (SQL)にチェックを入れてエクスポートします。

出力したファイル用バックアップは、複製した対象サイトでインポートして比較します。同名ファイルは衝突し得るため、既存テーマ・プラグイン・画像を退避してください。DBを除外しただけで、安全な追加処理になるわけではありません。
この工程で扱うのは以下のファイルです。メディアライブラリの添付情報やテーマ設定をDBへ登録する処理は、別に必要です。
- テーマ
- メディア
- プラグイン
投稿記事・固定記事・カスタム投稿記事の移行
いよいよデータベースに関連するデータの移行です。
新サイトにExport media with selected contentというプラグインを使って、投稿記事・固定記事・カスタム投稿記事のデータをエクスポートします。
プラグインを入れてツールのエクスポートメニューを開きます。

画像を含める場合はExport media with selected contentを選びます。公式説明では、本文やアイキャッチ等から関連画像を探しますが、独自フィールドなどの参照をすべて検出するわけではありません。両サイトの画像サイズ設定も照合し、ギャラリーや縮小画像の欠落を確認します。
対象サイトの「ツール→インポート→WordPress」でWordPress Importerを使い、出力したXMLを読み込みます。著者の割り当てと添付ファイルのダウンロードを確認してください。カスタム投稿タイプ・分類を登録するテーマやプラグインも移行先に必要です。
それぞれの種類の記事データをインポートしましょう。
件数、著者、分類、添付画像、本文中のリンク先を照合してから、投稿の移行を判定します。
ナビゲーションメニューの移行
新サイトにWPS Menu Exporterというプラグインを入れましょう。
先ほどと同様にツール>エクスポートからナビゲーションメニューの項目を選択してxmlデータをエクスポート

WPS Menu Exporterの公式説明では、メニューが参照するページや分類も出力対象です。投稿のXMLと重なる項目を先に照合してから、対象サイトへインポートします。
取り込み後はメニューの階層、各リンク先、テーマ上の表示位置を確認・割り当てします。これは従来のナビゲーションメニューの記録であり、ブロックテーマのナビゲーションブロックへ同じ手順を適用できるとは限りません。
テーマのカスタマイズ設定の移行
新サイトにCustomizer Export/Importというプラグインを入れます。
カスタマイズメニューを開いて、エクスポート / インポートメニューから書き出しを選んでdatデータをエクスポートします。

対象サイトでも同じプラグインを使います。公式説明では、出力元のテーマまたはその子テーマへのインポートが前提で、有効化中のテーマで使用します。画像の取り込み要否も選び、既存カスタマイザー設定を退避してから取り込んで比較します。
移行できないデータの設定
この組み合わせで全設定が移るわけではありません。Customizer Export/Importの標準対象はカスタマイザーの設定です。管理画面の独自設定など、対象外の項目は個別に確認します。
対象外の項目は元サイトと見比べ、設定値と変更理由を控えてから反映します。
具体的にいうとSWELLのテーマのSWELL設定を今回、修正しました。
文字置換
最後にSearch RegexのプラグインでURLのチェックをしましょう。
置換前にDBを退避し、検索だけで対象箇所を確認します。新サイト内部を指すURLに対象を絞り、外部リンクや計測パラメーターを変えないよう少数から置換します。設定値やシリアライズされたデータを通常の文字列として一括変更しないでください。
要するに対象サイトのURLで統一しておきます。
これは最後にAll-in-One WP Migrationを使って移行する時に自動で文字置換できるようにするためです。
確認
あとはサイトの状態を見て、諸々おかしいところがないかチェックしましょう。
インポート完了の表示だけでは判断できません。両サイトの件数とID対応を照合し、重複・欠落・画像の参照先・メニュー位置を確認してください。
本番サイトに移行
仮サイトの照合と復元試験を終えた後、更新停止の基準日時以降に増えた投稿・コメント・注文・会員等の差分を反映してから、本番移行を行います。全体インポートは既存DBを置き換えるため、稼働中の最新データをそのまま上書きしないでください。
まとめ
新規サイトを作成して、途中で昔のサイトのデータを移行したい。
または新規サイトを製作中に、本番サイトも更新されていて、最新の状態を反映して欲しい
というような要望がたまにあります。
All-in-One WP Migrationではデータベースは置換されてしまうので、それに関連するデータは本記事のように
要素ごとにエクスポートしてインポートするということになります。
もちろんバックエンドに強い人は差分をマージする手段もあると思いますが、黒い画面でコマンドを叩くのが苦手な人は
このプラグインを使い分けてデータをインポート、エクスポートする方法を試してみてください。
ID衝突と差分更新の確認
投稿IDや添付IDは移行先で変わる場合があるため、独自メタに保存したID、ブログパーツ参照、内部リンクを個別に照合します。
画像ファイルをコピーしただけでは、メディアライブラリの添付投稿とメタ情報は登録されません。
XMLへ添付情報を含めても、元画像を取得できないとファイルの移行は完了しません。
両サイトの更新を止める時間と基準日時を決め、移行準備後に追加された投稿・コメントを取りこぼさない手順を用意します。
本番反映前にはバックアップからの復元を試し、投稿・分類・画像・メニューの件数と表示を照合します。
問題があればデータとファイルを同じ時点のバックアップへ戻します。
過去の画面は操作記録であり、今回の改修で実サイトの統合や最新プラグインによる復元試験を行ったものではありません。
よくある質問:WordPressで別サイトの投稿・画像・メニューを追加移行するとき
この記事の方法は、2つのデータベースを自動で安全にマージするものですか?
いいえ。記事では、この記事は種類別のエクスポート・インポートの作業記録であり、2つのデータベースを自動で安全にマージする方法ではありません。サイト全体の復元と、既存サイトへ投稿を追加するインポートは別の処理です。
All-in-One WP Migrationだけで、旧サイトのデータを結合できますか?
できません。記事では、All-in-One WP Migrationではデータベースは置換されてしまうので、関連するデータは要素ごとにエクスポートしてインポートする方法を紹介しています。
投稿や画像は、どう移行しますか?
ファイル用バックアップと投稿用XMLは別工程です。前者ではDBを除外したファイルを検証環境へ取り込み、後者ではExport media with selected contentで関連画像情報を含むXMLを出し、WordPress Importerで読み込みます。添付ファイルのダウンロード、著者割り当て、独自参照画像の欠落、同名ファイルの衝突を確認してください。
ナビゲーションメニューや、テーマの設定はどう移行しますか?
記事では、メニューはWPS Menu Exporterプラグインで、ツール>エクスポートからxmlをエクスポートして対象サイトにインポートします。メニューは参照先や表示位置まで照合します。Customizer Export/Importは出力元のテーマまたはその子テーマが前提で、既存設定の退避と取り込み後の比較が必要です。
移行できない設定はありますか?
あります。カスタマイザー以外の独自設定は、この手順の標準対象とは限りません。対象外の項目を個別に比較し、当時の作業ではSWELL設定も調整しました。
URLの置換は、どう扱いますか?
記事では、最後にSearch RegexのプラグインでURLのチェックをし、対象サイトのURLに合わせて文字置換をします。投稿メタデータ情報(ナビゲーションメニュー)のURLは、文字置換後にエラーが出たことがあるため、手動で変更した方がいいかもしれません。エラーが出た場合は反復インポートによる重複を避け、変更前の検証環境へ戻して原因と対象項目を確認します。
IDや画像の移行で、気をつけることはありますか?
記事では、投稿IDや添付IDは移行先で変わる場合があるため、独自メタに保存したID、ブログパーツ参照、内部リンクを個別に照合します。画像ファイルをコピーしただけでは、メディアライブラリの添付投稿とメタ情報は登録されません。
本番へ反映する前に、何をしますか?
記事では、移行準備後に追加された投稿・コメントを取りこぼさないよう、両サイトの更新を止める時間と基準日時を決めます。本番反映前にはバックアップからの復元を試し、投稿・分類・画像・メニューの件数と表示を照合します。問題があれば、データとファイルを同じ時点のバックアップへ戻します。なお、記事の画面は過去の操作記録で、最新プラグインによる復元試験は行っていません。



