データをバックアップ・復元するにはいくつかの方法がありますが、WordPressにはデフォルトでXMLをエクスポート・インポートする機能が備わっています。
デフォルトの機能で済むなら、とインポートする手順を調べて実行しました。
ところが、事前にFTP(またはSFTP)で画像をアップロードすると、インポートした画像がダブることに気づきました。
場合によって「事前にFTPでアップロードする方法」は、適切とは言えません。
添付ファイルは画像だけでなく、テキストや音楽データも有りえます。
私の環境では画像ファイルしかなかったため、以下「添付ファイル」は「添付画像」を指します
XMLインポートの思い込み
WordPressのバックアップのために、エクスポートしたXMLファイルと、サーバ内にある「themes」「plugins」「uploads」のディレクトリを保存しています。
当初、インポートするXMLファイルはFTPでアップロードした画像を参照してくれるとものだと思っていました。
なので、インポートする前に画像ファイルをアップロードする必要があると思いこんでいたのです。
事前のFTPアップロードでファイルがダブる
インポート後のサーバのファイルを見てみると「-1.jpg」と連番になった画像が存在していました(Fig1)。
ファイルのタイムスタンプを見れば、インポートした画像はFTPによって「既に存在していた」ことがわかります。

ファイルがダブる理由
WordPressのインポートには、「元のサイトから添付ファイルをダウンロードする」というチェックボックスがあります。
チェックを入れて実行した場合、元のサイト(私の場合は本番環境)から画像ファイルがダウンロードされ、それがメディアライブラリに登録されるという流れだと思われます。
事前にFTPでアップロードすると、「インポート時のダウンロードで同名のファイルが存在するため連番になった」ことが原因でしょう。
なので、インポート時に元サイトからダウンロードする場合は”uploadsディレクトリをFTPでアップロードしなくていい”というのが結論。
(テーマを流用したいなら、themeディレクトリをアップロードする必要がある。)
(pluginsディレクトリも、アップロードするすれば設定を引き継ぐことが可能。)
チェックを入れなかった場合、画像ファイルはダウンロードされず、メディアライブラリにも登録されません。
当然、そのままではブログを開いてもアイキャッチや添付画像は表示できません。
事前にFTPアップロードするだけではメディアライブラリに登録されません。
例えば「media fom FTP」というプラグインで年月ベースに分類できるようですが、どこが間違っていたのか、うまく行きませんでした(Fig2)。
(インポート時のダウンロードを採用したため、media from FTPの検証はしていません)

もし本番環境でトラブルが起きて、それを復元したいと思ったとき……「元サイト」からのダウンロードは当然できません。
バックアップ・復元の方法として、メディアライブラリまわりにはひと工夫が必要な印象です。
PHP my adminのようにデータベースそのものを保存する準備が必要でしょう。
(まだ私は試していませんが。)
未検証・仮説あれこれ
Fig1の画像ではオリジナルサイズの画像しか連番が作成されていませんが、これは仮想マシンのサーバにGDモジュールがインストールされていなかったせいです。
これに気づいたのは再現作業の後半のことで、画像のダブりに気づいたときにはインストールされていませんでした。
(仮説)もしGDモジュールがインストールされていれば、オリジナルサイズがメディアライブラリに登録された際にサイズ差分のファイルが作られる。
作成したファイル名は事前にFTPでアップロードしたファイルと被るだろうから、サイズ差分の画像それぞれに「-1.jpg」という連番処理がされるだろう。
メディアライブラリに登録されることによって、ブログ閲覧時にアイキャッチや添付画像が表示される。
ということは、画像をダウンロードしない場合、インポート前にメディアライブラリに登録しておけば紐づけてくれるかもしれない。未検証。
まとめ
- インポート時にチェックを入れると、元のサイトから添付ファイルがダウンロードされる
- ダウンロードされた画像はメディアライブラリに登録される
- (GDモジュールがあれば)メディアライブラリに登録された際に「メディア」で指定したサイズ差分の画像が生成される
- すでに同名のファイルがサーバに存在している場合、上書きを防ぐためにファイル名に連番の処理がされる
- よって、インポート時に添付ファイルをダウンロードするなら、事前にFTPで”uploadsディレクトリ”をアップロードする必要はない(themes, pluginsディレクトリは状況による)
わかりやすくするため、WordPress ImpoterによるXMLをインポートしたときの挙動をフローチャートにしてみました。
