Movable Type 2.6x から WordPress への移行

2007-7-19 21:34
このエントリーをはてなブックマークに追加

長らく MovableType 2.661 のままで放置していた某ブログを WordPress に移しました。移行作業は本当にかんたんで、カテゴリーやユーザも存在しなければ作ってくれます。問題は URL が変わってしまうことなのです。

もともと MovableType でもキーワードを使って Permalink を http://example.jp/blog/2003/01/keyword のような形にしていました。さらに Apache の Content-Negotiation を使って拡張子からは .html を外していました。これは将来 PHP 等に移行した場合でもそのまま使えるようにという配慮でしたが、これが役に立ちました。拡張子を表示しない方がよい理由を詳しく知りたい人は クールなURIは変わらないを参照してください。

さて、WordPress の MT インポート機能は、MT で各エントリーにつけたキーワードを無視してしまいます。そこでスクリプトを改造して、このキーワードを投稿スラッグ (post_name) に渡すようにしてやります。変更するのは wp-admin/import/mt.php ファイルです。(WordPress 2.2 の場合)

--- mt.php.bak  2007-05-07 15:57:16.000000000 +0900
+++ mt.php      2007-07-19 17:50:01.000000000 +0900
@@ -196,6 +196,8 @@
                                $post = preg_replace("|(-----nCOMMENT:.*)|s", '', $post);

                                // We ignore the keywords
+                               preg_match("|-----nKEYWORDS:(.*)|s", $post, $keywords);
+                               $post_name = $wpdb->escape(trim($keywords[1]));
                                $post = preg_replace("|(-----nKEYWORDS:.*)|s", '', $post);

                                // We want the excerpt
@@ -288,7 +290,7 @@

                                        $post_author = $this->checkauthor($post_author); //just so that if a post already exists, new users are not created by checkauthor

-                                       $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt');
+                                       $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt', 'post_name');
                                        $post_id = wp_insert_post($postdata);
                                        // Add categories.
                                        if (0 != count($post_categories)) {

これで、MovableType からエクスポートしたファイルを読み込ませれば、無事に投稿スラッグにキーワードを移行できました。

ハマった点

Movable Type からエクスポートしたファイル (UTF-8) が途中で切れているように見えましたが、これはエディタで表示できない文字コードがあったようで、ウェブブラウザでは表示できました。またインポートも問題なくできました。

アップロードファイルサイズの制限に引っかかる。MT から 800 件以上のエントリーをエクスポートしたら、ファイルサイズが 2M を超えました。このままだと php のアップロードサイズの制限に引っかかります。ファイルを分割しても良いのですが、とりあえず php.ini の upload_max_filesize を一時的に増やして回避しました。

あと、同じキーワードのエントリーがある場合、投稿スラッグが重複してしまいます。このため、WordPress が勝手に keyword-2 のような投稿スラッグに変更してしまうため、一部のエントリーは URL がどうしても変わってしまいます。今回はこれ以上は断念して、この制約を受け入れました。

コメントはまだありません

No comments yet.

Sorry, the comment form is closed at this time.

33 queries. HTML convert time: 0.074 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン