ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
さて、私みたいにはるかかなた昔にMT2.6xを導入したきり、気がついたらMT4になっていて、そのうちWordPressブームみたいになっている方も多いかと思います。
MT3からのWPへの移行についてはもろもろ記事があるようですが、MT2.6xからの移行についてはあまり記事がないようです。
しかもパーマリンクを保持したままの移行についてはなおさら。
今回WPTouchに惹かれて思い切って移行してみましたので記事にしてみます。
移行の方針は以下の通りです。
- せっかくgoogleにも登録されているのでパーマリンクは保持する
- コメント、トラックバックも含めて完全移行
作業概要は以下の通りです。
この記事のもくじ
です。
では細かく解説します。
MTからデータのエクスポート
キミコさんオリジナルを参考にしている、MovableTypeからWordPressに固定リンク込みで完璧に移行する方法を参考にしてカスタマイズし、MTにテンプレートの設定をします。
実際に設定したテンプレートは以下の通りです。
<?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="1000"> <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$>archives/<$MTEntryID$>.html</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><$MTEntrykeyword$></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>
19行目:$ecountが効かないので1000としています。(私の記事の総数が1,000以下なので)
37行目:$Entrybody$が効かないのでbをBに、つまり$EntryBody$としています。
これでexport.xmlができました。
私のMT2.6xでは文字コードがEUCでしたので、(この時代はまだEUCが全盛でした)このeport.xmlをUTF-8に変更します。
# nkf -w export.xml > aaa.xml
エキスポートしたデータの編集(置換)
まだまだ問題があります。MT2.6xでは記事のURL(パーマリンク)がhttp://hogehoge/archives/000444.htmlのように/archives配下、かつ6桁のpost_id.htmlという形式でした。
エキスポートしたデータにも至る所に6桁のURLの記載があります。そこでこの0埋めした部分をカットしてやる必要があります。
置換はsakuraエディタを使うと正規表現ができるので楽だと思います。
置換前:http://hogehoge/archives/0*(d+.html)
置換後:http://hogehoge/archives/$1
とかでうまくいくはずです。
パーマリンク設定
「設定」->「パーマリンク設定」からパーマリンクをカスタム構造として以下のように設定します。
/archives/%post_id%.html
これだけだとまだ問題が残っており、移行したデータは0が抜かれた形式です。上記の例だと
blog.kamata-net.com/archives/485.html
として移行されてしまっています。パーマリンクが保存されないことになってしまいます。
そこで、テンプレートに一部手を入れます。
$wordpress/wp-includes/link-template.phpファイルです。
該当箇所は以下。
$date = explode(" ",date('Y m d H i s', $unixtime)); $rewritereplace = array( $date[0], $date[1], $date[2], $date[3], $date[4], $date[5], $post->post_name, sprintf("%06d",$post->ID), $category, $author, $post->post_name, );
WordPressへのインポート
「ツール」->「インポート」よりaaa.xmlを読み込みます。
コメント数、authorの修正
ここまででかなり移行できています。ところが、コメントは全て移行できているのに、トップ画面上コメント数が0になっており、「コメントはまだありません」と表示されています。
いろいろと調べてみると、wp_postsテーブルのcomment_countカラムの値が全て0になっていることが原因の模様。
そこでsqlで直接DBの値を変更してしまいます。
mysql> update wp_posts -> set comment_count = ( -> select count(comment_ID) from wp_comments where comment_post_ID = wp_posts.ID -> ); Query OK, 204 rows affected (0.26 sec) Rows matched: 468 Changed: 204 Warnings: 0
また、一部記事のオーナーがadminになっていたので、これを自分に変更です。
1がadminで2が自分になります。
mysql> update wp_posts -> set post_author = 2; Query OK, 236 rows affected (1.07 sec) Rows matched: 662 Changed: 236 Warnings: 0
これで完全移行完了です。