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が残っていないかを確認する