ホーム > タグ > Movable Type

Movable Type

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形式でインポートデータを書き出せばいいんじゃね?
ということで作ったのが、下記のテンプレートデータです。
(追記:ソースコードはキミコさんに改良していただいたものに差し替えました。)

<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
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/"
>

<channel>
<title><$MTBlogName$></title>
<link><$MTBlogURL$></link>
<description><$MTBlogDescription$></description>
<language>ja</language>
<wp:base_site_url><$MTBlogURL$></wp:base_site_url>
<wp:base_blog_url><$MTBlogURL$></wp:base_blog_url>

<MTSetVarBlock name="ecount"><$MTBlogEntryCount$></MTSetVarBlock>
<MTEntries lastn="$ecount">
<item>
<title><$MTEntryTitle$></title>
<link><$MTEntryPermalink$></link>
<pubDate><$MTEntryDate format="%Y-%m-%d %H:%M:%S"$></pubDate>
<dc:creator><![CDATA[<$MTEntryAuthor$>]]></dc:creator>
<category><![CDATA[<$MTEntryCategory$>]]></category>

<category domain="category" nicename="<$MTEntryCategory$>"><![CDATA[<$MTEntryCategory$>]]></category>
<MTEntryIfTagged>
<MTEntryTags>
<category domain="tag"><![CDATA[<$MTTagName$>]]></category>

<category domain="tag" nicename="<$MTTagName$>"><![CDATA[<$MTTagName$>]]></category>
</MTEntryTags></MTEntryIfTagged>

<guid isPermaLink="false"><$MTBlogURL$>/wp/?p=<$MTEntryID$></guid>
<description></description>
<content:encoded><![CDATA[<$MTEntrybody$>]]></content:encoded>
<guid isPermaLink="false"><$MTEntryPermalink$></guid>
<excerpt:encoded><![CDATA[<$MTEntryExcerpt$>]]></excerpt:encoded>
<wp:post_id><$MTEntryID$></wp:post_id>
<wp:post_date><$MTEntryDate format="%Y-%m-%d %H:%M:%S"$></wp:post_date>
<wp:post_date_gmt><$MTEntryDate format="%Y-%m-%d %H:%M:%S"$></wp:post_date_gmt>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>open</wp:ping_status>
<wp:post_name><$MTEntryBasename$></wp:post_name>
<wp:status>publish</wp:status>
<wp:post_parent>0</wp:post_parent>
<wp:menu_order>0</wp:menu_order>
<wp:post_type>post</wp:post_type>
<wp:post_password></wp:post_password>
<wp:postmeta>
<wp:meta_key>_edit_lock</wp:meta_key>
<wp:meta_value>1221409228</wp:meta_value>

<MTComments sort_order="ascend">
<wp:comment>
<wp:comment_id><$MTCommentID$></wp:comment_id>
<wp:comment_author><![CDATA[<$MTCommentAuthor$>]]></wp:comment_author>
<wp:comment_author_email><$MTCommentEmail$></wp:comment_author_email>
<wp:comment_author_url><$MTCommentURL$></wp:comment_author_url>
<wp:comment_author_IP><$MTCommentIP$></wp:comment_author_IP>
<wp:comment_date><$MTCommentDate format="%Y-%m-%d %H:%M:%S"$></wp:comment_date>
<wp:comment_date_gmt><$MTCommentDate format="%Y-%m-%d %H:%M:%S"$></wp:comment_date_gmt>
<wp:comment_content><![CDATA[<$MTCommentBody convert_breaks="1"$>]]></wp:comment_content>
<wp:comment_approved>1</wp:comment_approved>
<wp:comment_type></wp:comment_type>
<wp:comment_parent>0</wp:comment_parent>
<wp:comment_user_id>0</wp:comment_user_id>
</wp:comment>
</MTComments>

<MTPings sort_order="ascend">
<wp:comment>
<wp:comment_id><$MTPingID$></wp:comment_id>
<wp:comment_author><![CDATA[<$MTPingBlogName$>]]></wp:comment_author>
<wp:comment_author_email></wp:comment_author_email>
<wp:comment_author_url><$MTPingURL$></wp:comment_author_url>
<wp:comment_author_IP><$MTPingIP$></wp:comment_author_IP>
<wp:comment_date><$MTPingDate format="%Y-%m-%d %H:%M:%S"$></wp:comment_date>
<wp:comment_date_gmt><$MTPingDate format="%Y-%m-%d %H:%M:%S"$></wp:comment_date_gmt>
<wp:comment_content><![CDATA[<strong><$MTPingTitle$></strong>
<$MTPingExcerpt$>
...]]></wp:comment_content>
<wp:comment_approved>1</wp:comment_approved>
<wp:comment_type>trackback</wp:comment_type>
<wp:comment_parent>0</wp:comment_parent>
<wp:comment_user_id>0</wp:comment_user_id>
</wp:comment>
</MTPings>
</item>
</MTEntries>
</channel>
</rss>

使い方
(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を修正します。

MT4 + Vicunaに移行してみた

気が付けば2週間ほど更新が滞っていて、月日の経つのは早いものですな。
Movable Type 4(MT4)に移行し、デザインテンプレートの「Vicuna」を使ってみた。Vicunaはフリーで公開されているテンプレートで、MT4ならば Template Set Pluginを使って比較的簡単に適用できるのが魅力。

Vicuna – Movable Type テンプレート

ちなみに、WordPress、Nucleus、Serene Bach、FC2にも同様のテンプレートが公開されている。やっぱり最大のメリットは、ある一箇所のタグを書き換えるだけで、1カラム、2カラム、3カラムと自由にレイアウトを変更できる点。

しかも、2カラムも、左右にメインコンテンツを入れ替えることができるし、3カラムも中央にメインコンテンツを持ってくることも、左にメインコンテンツ左にサブコンテンツを2つ並べることもできる(このブログもそのスタイルですな) 。

嬉しいことに、いくつかデザインテンプレート(Skinと呼んでいる)が公開されていて、それを差し替えるのもカンタン。スタイルシートやhtmlにあまり詳しくない人でも、好みのレイアウトやデザインに変更することができるのではないでしょうか。

もっともMTビギナーやhtmlを一度もイジったことが無い人でもカンタンに使えるか、というとそれは結構厳しそう。僕はMTは使い慣れているのでMT4+Vicunaを使いますが、MTに触ったことがないという人なら、デザイン(こちらはThemesと呼んでます)の変更がむちゃくちゃカンタンなWordPressの方をオススメします。WordPress用のVicunaも公開されてますしね。

備忘録として、公式サイトではあまり触れられていないことをいくつか。

・sub-skinの適用

デフォルトのスキンセットである「ninja」には、sub skinという形で「Boomer」「Mono Crystal」という派生スキンが公開されています。これらsub skinを適用させるには、
(ここでは、すでに、ninjaが適用されていて、それをBoomerに差し替えたい場合を例にとって説明します)

1:スキンの配布ページから、「Boomer」をダウンロード
2:ダウンロードしたファイルを解凍すると、「1-subSkin.css」「2-singleUtilities.css」の2ファイルと「images」フォルダが出てくるはず
3:FTPでアクセスし、「/mt/mt-static/themes/style-ninja/subSkin/」にある、「1-subSkin.css」「2-singleUtilities.css」「imagesフォルダ」の上に、2で解凍されたファイルを全て上書きする。

でOKです。Boomerってスキン名なので他のスキン同様、

@import url(”<$MTStaticWebPath$>themes/style-Boomer/0-import.css”);

と入れてはみたけど適応されていない、なんて思いをしているのは僕だけではないはず。

Vicunaの雑感。
Vicunaのスキンをほぼそのまま使いたいって人はいいとして、Vicunaをベースにして色々とデザインをイジってみたいという人にはあまりオススメできないかも。

デザインの汎用性を持たせているので、とにかくコードが多い。分かりやすく分類はされているのですが、どこをどうイジったらサイトに反映されるのかがよむ分からない。僕も、FireFox+Firebugが無かったら心が折れていたかも。

サイドバーに特定の「タグ」が付いたエントリー内の画像を表示させる

右サイドメニューには、「最近買ったもの」という箇所がありますが、ここには文字通り、最近購入したモノの画像とそのレビュー記事へのリンクを貼られています。

Movable Typeを使って、サイドバーに特定のエントリーの画像を表示させるテクニックは今までもあって、たとえばエントリーの最新X件の画像を表示させるとか、あるカテゴリーに属する画像を一覧表示させることはできます。

しかしこのブログのように、「買ったもの」は本、ゲーム、ハードウェアと色んなカテゴリーに分かれていますので、今回はエントリーのタグに「購入」が付いているエントリーの画像の最近5件を表示させています。 なお、この機能を使うためには、「Collect Plugin for Movable Type」というプラグインを導入する必要があります。
ソースは下記の通りです。

<MTEntries tags="購入" lastn="5">
<MTCollect tags="img">
<MTCollectThis show="0">
<$MTEntryBody$>
</MTCollectThis>
<MTIfCollected tags="img">
<MTCollected tags="img" offset="1">
<p class="img">
<a href="<$MTEntryLink$>" title="<$MTEntryTitle$>"><img src="<$MTCollectedAttr attr="src"$>" width="120" /></a>
</a>
</p>
</MTCollected>
</MTIfCollected>
</MTCollect>
</MTEntries> 

Movable Typeで「概要」を&#x3c;descripti&#x6f;&#x6e;&#x3e;に設定する。- 決定版(多分)

 このブログは、Movable Type 3.35(以下、MT3)で構築されています。
(2009年9月1日追記:今日現在このサイトはWordPressで構築されています。MT3→MT4→WPと変遷しています)

 んで、MT3はデフォルトの設定では、<head>の<meta>部分が設定されていません。<meta>部分はSEO的にもちゃんと記載しておいた方が好ましいと言われている箇所です。

 とはいえ、1個1個の記事に<meta>を設定しているのも骨が折れますので、極力、手をかけないために「概要」の部分を<meta>の<description>として表示させてみました。

 「概要」の部分を入力するのがめんどくさいという理由で、「エントリーの内容」の冒頭の200字程度をピックアップして概要の代替テキストとして充てている人も多いと思うのですが、このブログの場合、「エントリーの内容」がいきなり別ブログの引用から始まったりするので、冒頭部分を機械的に引っ張ってくることができないのです。そこで概要の部分にはちゃんとテキストを記入しています。

 この記事のタイトルに「決定版」と付けていますが、それは同様の記事でよく見かける、「<meta name="description" content="<$MTEntryExcerpt$>" />」という記述の場合、僕のブログではうまく機能しなかったからです。

 僕のブログの「概要」には、他サイトへのリンクがあったり、開業が入っていたりしますが、先の記述では、<description>がおかしなことになってしまいます。 そこで余計なhtmlのタグや改行を取り除きプレーンなテキストにする記述をお伝えします。

 
上のフォームをクリックするとソース全部が選択されますので、そのままコピーしてください。

問題点が無いことも無いので、次回の課題恬として挙げておきます。
(1)URLがそのまま入ってしまう
(2)htmlのタグがそっくりそのまま抜かれてしまう。今回のように<meta>とか<description>なんてあるとそこ部分がゴソッと抜かれる。

Home > Tags > Movable Type

サイト内検索
RSS
メールマガジン

メールアドレスを入力してください:

配信: FeedBurner

  • 確定申告の書類が終わったので、これから郵便局に出してくる。使い勝手は最高に悪いことを除けば(それが大問題なんだけど)e-Taxは便利なのかもしれん。  3時間前
  • 明日、東映チャンネルで伝説のデビルマン(実写)をやる! 見ると腹が立つから見ない!  16時間前
  • @milon 本を一冊出した後に閉鎖っすね。茅ヶ崎に来てから色々狂ったなぁ。  16時間前
  • 来週からまたサラリーマン稼業に戻るよ。勤務地・渋谷の非IT・Web企業。自由が丘なら40分だったんだけどなぁ。茅ヶ崎からなら1時間半。遠いな、おい。  17時間前
  • 久しぶりに中山競馬場に行って来た。歩きタバコ上等のクズどもが多数徘徊してるので、ほんとは行きたくなかったんだけどね。子供連れてきてる親もいっぱいいたなぁ。心底クズ親だと思う。子供を巻き込むな、てめぇだけで来い。  18時間前
  • 銀英伝が舞台化されらしい。SF要素なんて皆無に近いので舞台化されやすいにしてもこれは・・・。外伝2巻のユリアン日記の舞台化ならば迷わず観る。  3日前
  • いい加減、ドクター中松の話題は全マスコミがスルーしないかな。彼にまつわる与太話・虚構を真に受ける人間がいるかと思うと気分が悪い。  4日前
  • ハイロウズの青春を聴き中。  1週間前
  • スカパーのカスタマーセンターに連絡中。絶賛たらい回し中。  1週間前
  • スカパーHDってひとつのアンテナ線から2つのチューナーに分配できないのかー。地デジもそうだけど、画質の向上と引き換えに、使い勝手がおそろしく悪くなるのは勘弁して欲しいよ。  2週間前
  • 過去の独り言...

Posting tweet...

Powered by Twitter Tools.

最近の投稿
Tag Cloud

Return to page top