2026年10月5日

2026年10月5日

WP-CLIのimportコマンドでWXRファイルの記事を取り込む方法

WordPress のエクスポートファイル(WXR形式のXML)は、WP-CLI の wp import でコマンドラインから取り込めます。管理画面のインポーターでは途中で止まりやすい大きなファイルでも、ブラウザのタイムアウトを気にせず処理できるのが利点です。この記事では、事前に必要なプラグインの準備から、投稿者の割り当て、画像の扱い、取り込み後の確認とつまずきやすい点までを説明します。

wp import と wp db import の違い

最初に、似た名前の2つのコマンドを区別しておきます。

  • wp import:WXR形式(XML)のファイルから、投稿・固定ページ・コメント・カテゴリー・タグ・カスタムフィールドなどを「記事データとして」追加します。既存の記事は残ったままです。
  • wp db import:SQLファイルをデータベースにそのまま流し込みます。サイト全体の移行やバックアップからの復元に使い、既存のテーブルは上書きされます。

別のサイトから記事だけを移したい、複数のサイトの記事を1つにまとめたい、といった場面は wp import の役割です。設定やプラグインの状態も含めてサイトを丸ごと移すなら wp db import とファイルのコピーを使います。CSVファイルは wp import では読み込めないため、CSVを扱う場合は別の手段が必要です。

準備:WordPress Importer を有効にする

wp import は、WordPress.org 公式の「WordPress Importer」プラグインの機能を呼び出して動きます。プラグインが入っていないとエラーになるため、先にインストールして有効化します。

wp plugin install wordpress-importer --activate

# 有効になったか確認
wp plugin list --name=wordpress-importer --fields=name,status,version

取り込みは既存の記事に追加される形で行われ、元に戻すコマンドはありません。本番サイトに取り込む前にデータベースのバックアップを取り、可能ならステージング環境で一度試してください。

wp db export ~/backup/before-import-$(date +%Y%m%d-%H%M).sql

ここで紹介するオプションは WP-CLI 2系と WordPress Importer の現行版を前提にしています(2026年10月現在)。オプションはバージョンで変わることがあるため、wp help import で手元のヘルプも確認してください。

基本の取り込み

取り込みには、投稿者をどう扱うかを指定する --authors が必須です。

# WXR内の投稿者を新しいユーザーとして作成する
wp import example.wordpress.2026-10-01.000.xml --authors=create

# 投稿者の対応付けを行わない
wp import example.wordpress.2026-10-01.000.xml --authors=skip

# 対応表(CSV)に従って既存ユーザーに割り当てる
wp import example.wordpress.2026-10-01.000.xml --authors=mapping.csv

create は、移行先に同じユーザーがいない場合の手軽な方法です。ただし、作成されたユーザーのパスワードは移行元から引き継がれないため、対象ユーザーにはパスワードの再設定を案内する必要があります。不要なユーザーを増やしたくない場合は、対応表を使う方法が向いています。

投稿者の対応表を作る

--authors= に存在しないCSVファイル名を指定すると、WXR内の投稿者を並べた対応表の雛形が作られ、取り込みは行われずに終了します。

wp import export.xml --authors=mapping.csv

作られたファイルは「移行元のユーザー名,移行先のユーザー名」の形になっているので、右側を移行先の既存ユーザー名に書き換えてから、同じコマンドをもう一度実行します。複数の書き手の記事を1人の編集者アカウントにまとめる、といった調整もこの表で行えます。雛形の作成の挙動はバージョンによって異なる可能性があるため、初回は出力メッセージをよく読んでください。

複数ファイルをまとめて取り込む

エクスポート時にファイルが分割されている場合は、ファイル名を並べるか、ディレクトリを指定します。

wp import export-dir/ --authors=mapping.csv

カテゴリーやタグの定義は先頭のファイルに含まれていることが多いため、分割ファイルを個別に取り込むときは番号順に処理してください。

画像(添付ファイル)の扱い

WXRファイルには画像そのものは入っていません。入っているのは添付ファイルの情報と元サイトでのURLで、wp import は取り込みの途中でそのURLから画像をダウンロードし、移行先のメディアライブラリに登録します。

このため、次の点でつまずきやすくなります。

  • 移行元のサイトが停止していたり、アクセス制限がかかっていたりすると画像を取得できない
  • 画像の数が多いと、ダウンロードとサムネイル生成に長い時間がかかる

時間を短くしたい場合は、サムネイルの生成を後回しにできます。

# サムネイル生成を省略して取り込み、後でまとめて生成する
wp import export.xml --authors=create --skip=image_resize
wp media regenerate --yes

--skip=attachment で添付ファイル自体を取り込まないこともできますが、その場合はメディアライブラリに画像の記録が作られず、アイキャッチ画像の設定などが失われます。本文中の画像URLは旧サイトのまま残るため、旧サイトを閉じる予定があるなら避けたほうが安全です。

本文中のリンクを新しいサイトのURLに書き換える --rewrite_urls も用意されています。ただし対象となるリンクの範囲には限りがあるため、取り込み後に wp search-replace の --dry-run で旧URLが残っていないかを確認すると確実性が上がります。

取り込み後の確認

取り込みが終わったら、件数と表示を確認します。

# 投稿と固定ページの件数
wp post list --post_type=post --format=count
wp post list --post_type=page --format=count

# 添付ファイルの件数
wp post list --post_type=attachment --format=count

# パーマリンクの再生成
wp rewrite flush

移行元の件数と比べて大きく違う場合は、取り込み時のログを見直します。WordPress Importer は、タイトルと投稿日が同じ記事がすでにある場合、重複とみなしてスキップすることがあり、その旨のメッセージを出します。同じファイルを2回取り込んでも記事が倍にならないのはこのためですが、意図して別記事として入れたい場合は注意が必要です。

カスタム投稿タイプの記事を取り込む場合は、移行先でも同じ投稿タイプを登録しているプラグインやテーマを先に有効化しておきます。登録されていない投稿タイプの記事は、正しく表示・管理できません。

うまく取り込めないときの確認ポイント

インポーターが見つからない旨のエラーが出る

WordPress Importer が有効になっていない状態です。表示される文言はバージョンによって異なりますが、プラグインの導入を求めるメッセージであればこの原因を疑います。マルチサイトでは、取り込み先の子サイトで有効になっているかを --url= 付きで確認します。

wp plugin list --url=https://example.com/blog/ --status=active
wp import export.xml --authors=create --url=https://example.com/blog/

メモリ不足で止まる

大きなファイルではPHPのメモリ上限に達することがあります。CLI用のPHPは、Web用とは別の設定ファイルを読んでいる場合があるため、まず wp cli info で使われている php.ini を確認します。一時的に上限を上げて実行する方法もあります。

php -d memory_limit=1024M "$(command -v wp)" import export.xml --authors=create

それでも止まる場合は、エクスポート側で --max_file_size を小さくして分割し直すと安定しやすくなります。

XMLの形式エラー

ファイルの途中で文字化けや切れがあると読み込めません。xmllint --noout export.xml が使える環境なら、形式に問題がないかを事前に確認できます。

個人情報の扱い

WXRファイルにはコメント投稿者のメールアドレスやIPアドレス、投稿者の情報が含まれます。ファイルを共有ストレージやメールでやり取りしない、作業が終わったら削除する、といった扱いを決めておいてください。

まとめ

  • wp import はWXRの記事データを追加するコマンドで、SQLを流し込む wp db import とは役割が違う
  • 事前に WordPress Importer を有効化し、データベースのバックアップを取る
  • --authors は必須。既存ユーザーに割り当てるなら対応表CSVを作って使う
  • 画像は取り込み中に元サイトからダウンロードされるため、移行元を動かしたまま作業する
  • 取り込み後は件数を比べ、旧URLが残っていないかを確認する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲