mtからwpへの移行
2008 年 11 月 21 日 金曜日ここ最近、2つのブログをmtからwpへ移行しました。
いろいろと情報を集め、実際に試してみた結果を残しておきます。
まず最初に参考にしたページがここ。
http://apps.tpot.tk/web:wordpress
最初は「全ページを完璧に移行する。パーマリンクもmtとまったく同じにするぞ!」と意気込んでおり、このページを参考に完璧な移行を目指しました。
が、すぐに挫折。
まず、このページで扱っているmtとwpがちょっとバージョン古めみたいで、ソースコードがけっこう違っていました。
それでも頑張ればなんとかなるだろうと思っていろいろ試したんですが、やっぱりソースをガリガリいじるのは正直シンドイです。しかもmtとwp両方となるとなかなか。。
というわけで、100点満点でなく60~80点くらいを目指す方向へとシフトしました。
続いて参考にしたページがこちら。
http://netscrander.com/archives/mt_to_wp.php
mtのテンプレートでWXR(WordPress eXtended RSS)という、WordPressのブログ移行用のデータを作成するというやり方。
なるほど、この発想はなかったです。というかWXRの存在自体を知りませんでした。
さっそく上記のサイトからテンプレートを取得してmtでWXRを出版。テスト環境のwpにデータを取り込んでみましたが、なかなかいい感じ。コメントやトラックバックもしっかり移行できてます。
カテゴリの階層構造が移行できないといった問題もありましたが、数がそんなに多くなかったのでインポート後に手動で再設定しました。
そんな感じでトライアンドエラーを繰り返しつつ、最終的にこのやり方でデータの移行を完了しました。
最後に、これは自分のオリジナルなんですが、mtで出版したHTMLからwpの記事へリダイレクトする方法を紹介します。
まずはmtでWXRを作成する際、こんな感じでmtの記事IDをカスタムフィールドに入れます。
<wp:postmeta>
<wp:meta_key>mt_entry_id</wp:meta_key>
<wp:meta_value><$MTEntryID$></wp:meta_value>
</wp:postmeta>
そしてデータ移行が完了したら、wpのMySQLで以下のSQLを実行します。
SELECT meta_value , ' => ' , post_id , ',' FROM wp_postmeta WHERE meta_key LIKE 'mt_entry_id';
SQLで抽出したデータをこんな風にphpの変数にして、mt_wp_map.phpとか適当な名前を付けてサーバーに保存。
<?php
$mt_wp_map = array(
1234 => 4 ,
1235 => 5 ,
1236 => 6 ,
1237 => 7 ,
1238 => 8 ,
1239 => 9 ,
...
);
?>
そしてmtの記事ページテンプレートを以下のようにします。
<?php
require("/path/to/mt_wp_map.php");
$wp_post_id = $mt_wp_map[<$MTEntryID$>];
if($wp_post_id)
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: /path/to/wp/?p=$wp_post_id");
exit;
}
?>
あとはページを再構築すれば全記事ページからwpへリダイレクトされるようになります。
できればカテゴリページや月別アーカイブページもリダイレクトさせたいんですが、面倒なので対応しませんでした。
カテゴリページなどは数が多くなければ手作業でやっちゃったほうが早いかもしれません。
以上でデータ移行完了。テーマのカスタマイズについては今回は割愛します。
他にもっといいやり方もあるような気がしますが、とりあえずこれで無事移行できたので満足しています。
mtからwpへの移行はいい勉強になりますので、それなりに程度時間をかけて取り組む価値があると思いました。
今回紹介した方法以外にもバージョンや運用形態によってそれぞれ適した移行方法があると思うので、いろいろ試してみてください。
最後に、移行後しばらくして気がついた、忘れがちなポイントを紹介しておきます。
・静的ファイル各種
robots.txtとかGoogleやYahooのウェブマスターツールの認証用HTMLとか忘れがちなので注意。
・HTMLのコメントがそのまま表示されてしまう
mtの記事内にHTMLのコメント(こういうの→「<!–コメント–>」)を入れていたんですが、wpではそのまま表示されてしまっていました。
・更新Pingリスト
記事情報以外の設定データは忘れがちなので要注意。