MovableTypeからWordPressに固定リンク込みで完璧に移行する方法

MovableType(MT)からWordPress(WP)に乗り換えようとするときに、必ずネックになってくるのが記事データ移行の問題。

MovableTypeのエクスポートデータをWordPressにインポートできるんだけど、そのときに移行できるのは、記事本文・コメントのみ。パーマリンク(URL)、カテゴリー、タグといった付帯情報は一切引き継ぐことができない。

MT・WPそれぞれのソースコードを修正してパーマリンクを引き継がせるなんてこともできるけど(下記リンク参照)、MT・WPがバージョンアップされ、元のソースコード自体が変わってしまうと、どこを修正していいのか分からなくなってしまうのが欠点。

MovableTypeからWordPressへのURL込みの移行方法Wiki@browncat.org

WPからWPへ、WXR(WordPress eXtended RSS)形式のデータを使ってブログ内容を引継ぎできるのであれば、MTでもWXR形式でインポートデータを書き出せばいいんじゃね?
ということで作ったのが、下記のテンプレートデータです。
(追記:ソースコードはキミコさんに改良していただいたものに差し替えました。)

(2010年6月8日追記:「追記」部分のインポートがうまく作動していなかった点をSatoshiさんが改善してくれました。改善されたコードはSatoshiさんのブログにてご確認ください。→movabletypeからwordpressに移行する時のテンプレート改良版

[xml]

xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.0/"
>

<$MTBlogURL$> <$MTBlogDescription$>
ja
<$MTBlogURL$>
<$MTBlogURL$>

<$MTBlogEntryCount$>

<$MTEntryPermalink$> <$MTEntryDate format="%Y-%m-%d %H:%M:%S"$> ]]>

]]>

<$MTBlogURL$>/wp/?p=<$MTEntryID$>

]]>
<$MTEntryPermalink$>
]]>
<$MTEntryID$>
<$MTEntryDate format="%Y-%m-%d %H:%M:%S"$>
<$MTEntryDate format="%Y-%m-%d %H:%M:%S"$>
open
open
<$MTEntryBasename$>
publish
0
0
post


_edit_lock
1221409228



<$MTCommentID$>
]]>
<$MTCommentEmail$>
<$MTCommentURL$>
<$MTCommentIP$>
<$MTCommentDate format="%Y-%m-%d %H:%M:%S"$>
<$MTCommentDate format="%Y-%m-%d %H:%M:%S"$>
]]>
1

0
0



<$MTPingID$>
]]>

<$MTPingURL$>
<$MTPingIP$>
<$MTPingDate format="%Y-%m-%d %H:%M:%S"$>
<$MTPingDate format="%Y-%m-%d %H:%M:%S"$>
<$MTPingTitle$>
<$MTPingExcerpt$>
…]]>

1
trackback
0
0






[/xml]

使い方
(1)上のソースコードをMovableTypeの管理画面(ダッシュボード)の「デザイン」>「テンプレート」で「インデックステンプレートを作成」し、コピペします。
そそして適当なテンプレート名・出力ファイル名(仮に、export.xmlとします)を付け、保存・再構築します。

(2)無事に再構築が終わると、サイトのトップディレクトリに、export.xmlが生成されていますので、それをFTPでダウンロードします。

(3)移行元のMTと移行先のWPでパーマリンク設定が異なっていると、パーマリンクが引き継げないので、WPのパーマリンク設定をMTに揃えます。というわけで、WordPressにログインし、ダッシュボードから「管理」>「パーマリンク設定」で変更します。
MTのアーカイブ設定が「yyyy/mm/entry-basename.nhml」となっていれば、WPでは「/%year%/%monthnum%/%postname%.html」となります。
ちなみに当ブログは「/archives/<$MTEntryBasename$>.php」となっていましたので、WPでは「/archives/%postname%.php」としました。
(※:MT 2.xでは、basenameというテンプレートタグがなかったので、<$MTEntrykeyword$>を記事URLに流用するテクニックもありましたが、そういったテクニックを使っている方は、<$MTEntryBasename$>の箇所を<$MTEntrykeyword$>に変えてください)

(4)WPにexport.xmlを読み込ませます。「管理」>「インポート」に移動すると、インポート用のデータ形式を選択するページが表示されますので、「WordPress」を選択してください。
そして「export.xml」を読み込ませると移行は完了です。記事内容・コメント・トラックバック・カテゴリー・タグが移行されているはずです。(※MTの概要は、WPの抜粋に移行します)

既知の問題

タイトルで「完璧」と言っている割に、若干の問題もあります。

(1)MTで未公開になっている記事はエクスポートされません。
・対処法1:すべての記事を一旦公開状態にして書き出し、移行後に、未公開記事だった記事を未公開設定にする。一旦公開状態になってしまうので、ちょっと気持ち悪いですがインポートとエクスポートが一回で終わります。

・対処法2:一旦、通常の方法で、MT→WPへ記事を移行する。んで、未公開の記事だけを残し、後の記事は全て削除。その後、あらためて、上記の方法を使って記事をインポート。二度手間にはなるものの、こちらの方がオススメ。

(2)カスタムフィールドのインポートには対応していません。ベータ版のテンプレートデータにはカスタムフィールドの移行も含まれていたのですが、いまいち、WXR形式のカスタムフィールドの項目の仕様がよく分からなかったので削除しました。

(3)カテゴリーの名称
カテゴリー自体は移行していますが、URLまでは引き継げていませんので、移行後に、手作業でカテゴリーのURLを修正します。

  1. 有益な方法のご紹介ありがとうございました!
    うまくいかないところがあったので、修正して使っています。

    コピペしてさくっと成功する完成度で、このタイミングで公開すれば、注目を集めることができるかもしれませんよ~~。

    書籍も楽しみにしています。

    • らくぶろ
    • 2009年 6月20日

    はじめまして。
    mt2wp.zipをダウンロードし、解凍しようとしたのですが、どうやら書庫ファイルが壊れているらしくうまく解凍できません。
    こちらの環境のせいかもしれませんが、ご確認お願いします。

    • 吉村
    • 2009年 6月21日

    コメントありがとうございました。 
    ZIPファイルでの配布を取りやめ、ソースコードをそのまま記載しましたので、こちらをコピペしてお使いください。

    • らくぶろ
    • 2009年 6月21日

    こんばんわ。
    早速つかわせていただきました。
    しかし、MTの追記がインポートできないようです。(xmlファイルにも追記が書き込みされていないようです。)
    お忙しい中失礼いたしますが、確認のほうよろしくお願いします。

    • とも
    • 2009年 9月15日

    MT ver3.35 ではそのままだと使えなかったのですが、以下の変更でうまくいきました。ありがとう御座います。

    18.
    を削除し、
    19.

    19.

    • 吉村正春
    • 2009年 9月16日

    >ともさん
    お役に立てようで何よりです。
    大変申し訳ないのですが、コメントが途中で切れてしまいました。
    お手すきのときでも、切れた部分を補っていただけると助かります。
    MT3を使っている方は結構多いと思いますので!

    • tyr
    • 2010年 3月16日

    はじめまして,MTからWPの移行をしようと思い,たどり着きました.
    MT3.35を使用しているので,ともさんの切れてしまっている部分が気になります.私からも補っていただけると助かります.
    よろしくお願いします.

  2. はじめまして。古い記事にコメント失礼します。

    こちらのテンプレートを用いて移行したところ、追記部分が動いていなかったので、改良したものを公開させて頂きました。
    詳しくはTrackbackをご覧下さい。

    • 吉村正春
    • 2010年 6月8日

    Satoshiさん
    コードを改善いただきありがとうございます!
    本文中でもご紹介させていただきます。

  3. 快諾して下さったばかりか、紹介までして頂き有り難うございます!

  4. 移行にあたり参考にさせていただき、不完全ながら、Movable TypeのウェブページをWordPressのページにインポート可能なテンプレートを作らせていただきました。

  5. 度々失礼します。
    せっかくリンクして頂いていて言うのも、お気持ちを無下にするようで申し訳ないのですが、もし宜しければ私の書いたコードも併せて公開して頂けませんか?

    この追記を含めたテンプレートは、需要のある情報のようなのですが、残念ながらこちらのサイトは運営が不安定なもので、いつ消えるとも分かりません。

    ご検討願います。