[解決]WordPressの移行を成功させる方法
かなりの数のWordpressを立ち上げてきました。
結果として、アップデートが面倒になり、まとめて取り扱うことの出来るツールを使うようになりました。
段々とWordpressが分かってきてやりたいことが出てきました。
その結果、複数立ち上げているWordpressをマルチサイト化して統合したいというニーズが生まれました。
とは言え、数年は運用しているWordpressです。データ量がそれなりにあるのです。移行に苦戦をしました… という話し。
移行出来なかった手段について
まず、サイトの統合という事なので、MySQLのデータをdumpして新しいサーバに移行するとかそういうことでは有りません。サーバの引っ越しについては簡単に出来るスキルが付きましたが、統合には手こずりました。
WPデフォルトの機能で全データをXMLファイルで出力し、統合先のWordpressで読み込ませました。
XMLファイルをインポートする形式で統合したい理由というのは、記事作者の割り当てとメディアファイルの割り当て、アイキャッチ画像の割り当てをきちんとWordpressに処理して欲しいからです。
これをやってもらわないと、色々と苦労する事になります。作者とメディアファイルのIDの割り当てなんて1つずつやっていたら死んでしまう。少なくとも僕にはそのガッツは有りませんでした。
それで、標準の機能でインポートを行うと、サーバがエラーを吐きます。メディアのダウンロードに時間がかかるのでタイムアウトをするのでしょう。サーバーが色々なエラーを吐いて処理が止まります。
サーバー側のNginx,PHP等のタイムアウトの時間を伸ばしてみたのですが、ダメでした。結果的に言うと、タイムアウト時間を1hとかにすればうまく行ったのかもしれないのですが、10分程度でなんとかなるだろうと思って設定していた自分にはダメな理由が見えなかったのです。
ではどうやって移行するのか
簡単なことです。
Attachment Importerというプラグインをインストールして、先にメディアファイルをインポートするのです。因みに、エクスポートしたXMLファイルを指定すればメディアファイルのみ抽出してダウンロードしてくれます。
インストールするとこんな感じでインポート画面に現れます。
このインポーターはデフォルトのインポーターでファイルをダウンロードするのと違って、インポートボタンを押したあとに、処理状況を表示し続けながら画像のダウンロードを続けてくれます。
やってみれば分かるのですが、タイムアウトになりません。1つずつ処理を投げてるからなのかな。
こうやってメディアファイルのインポートを終えてから、通常通りインポートをしましょう。ファイルのダウンロードは今回は不要です。
テキストのインポートだけならタイムアウトするなんてことも無いでしょう。程なくインポートは終わります。
コンテンツ内に画像を貼り付けている場合は、画像へのパスが変わっている可能性があります。
wp-content/uploads/ から wp-content/uploads/sites/*/
*はサイトIDの数字が入ります。
XMLファイルをアップロードする前に一度画像URLを置換しちゃいましょう。それで解決します。