WordPress

WordPressのブログ記事だけを別のWordPressへ移す手順|画像の取りこぼしを防ぐエクスポートとURL置換

「サイト全体ではなく、ブログの記事だけを別の WordPress に移したい」という相談を受けました。移行元のサイトにはブログカテゴリーの記事が約600件あり、固定ページやほかのカテゴリーの投稿はそのまま残します。

サイトを丸ごと引っ越すならプラグイン1つで済むことも多いのですが、「一部の記事だけ」となると話が変わります。特に悩むのが画像の扱いです。この記事では、検討した方法の比較と、最終的に選んだ3ステップの手順をまとめます。

移行の流れ

  1. 移す方法を比べて決める
  2. 移行前に、URLや旧記事の扱いを決めておく
  3. 記事と画像情報をまとめてエクスポートし、インポートする
  4. 取りこぼした画像を FTP でアップロードする
  5. 本文中の画像URLを一括置換する

1. 「ブログ記事だけ」を移す方法を比べる

候補にしたのは次の4つです。

① WordPress 標準のエクスポート/インポート

管理画面の「ツール → エクスポート」で「投稿」を選ぶと、カテゴリーや期間で絞り込んで XML ファイル(WXR形式)を書き出せます。追加のプラグインがいらないのが利点です。

ただし、カテゴリーで絞り込んだ場合、記事に使われている画像(メディア)の情報は XML に含まれません。そのままインポートすると、本文の画像は旧サイトのURLを参照したまま、アイキャッチ画像は外れた状態になりがちです。

② WP All Export / WP All Import

CSV や XML で、出力する項目を細かく選べるプラグインです。カスタムフィールド(ACF)や SEO プラグインのメタ情報まで柔軟に移したい場合に向いています。そのぶん設定項目が多く、単純な記事の移行には少し大がかりです。

③ WP-CLI・REST API・データベースを直接触る

サーバーで WP-CLI が使えるなら、カテゴリーを指定してエクスポートできます。件数が多い場合や、何度もやり直す可能性がある場合には強力ですが、技術者向けの方法です。

wp export --post_type=post --category=blog

④ 手動でコピーする

数記事なら、これがいちばん確実です。600件では現実的ではありません。

サイト丸ごと複製のプラグインは不向き

All-in-One WP Migration や Duplicator のような移行プラグインは、サイト全体を複製するためのものです。移行先にすでにサイトがある「ブログだけ移す」ケースでは、移行先の内容を上書きしてしまうので使えません。

2. 移行の前に決めておくこと

作業に入る前に、次の点を相談相手とすり合わせました。あとから決めると、やり直しが発生しやすいところです。

また、600件規模になると XML ファイルが大きくなり、インポート中にタイムアウトしやすくなります。その場合は期間で区切って分割エクスポートします。区切りの境目で記事が抜けたり重複したりしやすいので、期間の指定とインポート後の件数はよく確認してください。

3. 記事と画像情報をまとめてエクスポート・インポートする

最終的に選んだのは、標準のエクスポートを補うプラグイン「Export media with selected content」を使う方法です。インストールすると、標準のエクスポート画面で、選んだ記事に関連するメディア(添付ファイル)の情報も一緒に XML に含められるようになります。

  1. 移行元に「Export media with selected content」をインストールする
  2. 「ツール → エクスポート」で「投稿」を選び、カテゴリーでブログを指定し、メディアも含める設定にして書き出す
  3. 移行先の「ツール → インポート」で WordPress インポーターを使い、XML を読み込む
  4. 投稿者の割り当て画面で「添付ファイルをダウンロードしてインポートする」にチェックを入れて実行する

インポーターは、XML に書かれた画像のURLを見て、旧サイトから画像をダウンロードしてきます。そのため、インポートが終わるまでは旧サイトを公開したままにしておく必要があります。Basic 認証をかけたり、先に記事を削除したりしないように注意してください。

いきなり全件を流すのではなく、最初に数記事だけでテストして、本文・アイキャッチ・カテゴリー・タグが期待どおりに入るかを確かめてから本番に進みました。

4. 取りこぼした画像を FTP でアップロードする

件数が多いと、ダウンロードに失敗した画像や、メディアとして登録されていない画像(本文に直接書かれたものなど)が出てきます。これを補うために、旧サイトの wp-content/uploads の中身を FTP で移行先にアップロードしました。

FTP で置いたファイルはメディアライブラリには登録されませんが、本文の画像として表示するだけなら問題ありません。

5. 本文中の画像URLを一括置換する

最後に、本文に残っている旧ドメインの画像URLを、移行先のURLに置き換えます。使ったのはプラグイン「Better Search Replace」です。

  1. データベースのバックアップを取る:置換は元に戻せないので、必ず先にバックアップします
  2. ドライランで件数を確認する:「ドライランとして実行」にチェックを入れたまま実行すると、実際には書き換えずに、何件が置換対象になるかだけを確認できます
  3. 本番の置換を実行する:件数が想定どおりなら、チェックを外して実行します

設定は次のようにしました。

検索: //old.example.com/wp-content/uploads
置換: //new.example.com/wp-content/uploads
対象テーブル: wp_posts, wp_postmeta
GUID を置換: オフ

6. 移行後に確認すること

旧サイトの記事を消すのは、ここまでの確認がすべて終わってからにします。画像のダウンロード元でもあるので、早めに消すと取り返しがつかなくなります。

まとめ

記事数が多いほど、「まず数件で試す」「件数を数える」が効いてきます。一度に終わらせようとせず、確認しながら少しずつ進めるのが結局いちばんの近道でした。

アバター
この記事を書いた人 トノムラマサシ

masashi Webサイト屋兼ブロガー|過去に企業常駐などを経て現在はフリーランスでディレクションとコーダーとして活動しております。JS大好きなのでJSの仕事依頼お待ちしております。京都在中で5人家族。