Hatena::ブログ(Diary)

minorio のプログラミング・メモ

RSS2

2008-08-25

[][] Movabletype から WordPress への移行(ついでにドメイン移行、パーマリンクリダイレクト)の方法 16:17

参考サイト:

上記、参考サイトでは、それぞれパーマリンクに Post ID を含むケースと、パーマリンクURL 構造を引き継ぐ方法が載っている。

今まで Movabletype では記事タイトルをベースにしたパーマリンクを使っていたが、日本語のタイトルの扱いが中途半端だと感じていた。そこで、WordPress への移行を機に Post ID をベースにしたパーマリンクに変更しようと思う。

おまけにドメインも変更するので、旧ブログ側のサーバー.htaccess を設定してリダイレクトしてやる必要がある。

以上をまとめると以下の作業が必要になる。ちなみにバージョンは、MT 3.171-ja と WP 2.6.1 である。

Movabletype からの書き出しの際に Post ID を含める

$MT/lib/MT/ImportExport.pm を編集する(+の付いている2行を追加)。パーマリンクの行はなくてもいいけど、念のため出力しておく。

 AUTHOR: <$MTEntryAuthor strip_linefeeds="1"$>
 TITLE: <$MTEntryTitle strip_linefeeds="1"$>
 STATUS: <$MTEntryStatus strip_linefeeds="1"$>
+PERMALINK: <$MTEntryPermalink$>
+ID: <$MTEntryID$>
 ALLOW COMMENTS: <$MTEntryFlag flag="allow_comments"$>
 CONVERT BREAKS: <$MTEntryFlag flag="convert_breaks"$>
 ALLOW PINGS: <$MTEntryFlag flag="allow_pings"$>

WordPress への取り込みの際に Post ID を引き継ぐ

/wp-admin/import/mt.php を編集する。以下の参考ページで提供されているスクリプトを参考にした。

Find the file mt.php inside the folder /wp-admin/import, and rename the file to something like mtORIG.php (for backup purposes).

Then replace the file with this one. In the new version of this file, I've altered the function that updates the database, to include the post number when it does the update. (For esoteric reasons, this is not a trivial modification in WordPress v.2. They're no longer using conventional SQL queries, for one thing.)

Importing from MT to WordPress :: Mudita Journal

同ファイルの先頭に wp_insert_post_with_id() という関数を追加して、/wp-includes/post.php にある wp_insert_post() という関数の代わりにこの関数を使うことで Post ID を引き継ぐようにする。

ただ、WordPress のバージョンが上がってコードが随分変わってしまったので、新しく WP 2.6.1 用のコードを置いておきます(動作の保証/サポートはできないので、十分にテストしてから使ってくださいね)。すでにインポート済みのエントリーはスキップしてくれるので、インポート作業を繰り返しても重複した記事が何度もアップされるようなことはありません。でも内容が書き変わっていても上書きしてくれません。

mt.php.zip

インポートの前処理

リダイレクト用の .htaccess を生成するスクリプト

上記参考サイト:IDを維持したままMovable Type 3.2からWordPress2.0.2へ移行する - Odysseygate.com および、Using .htaccess for redirection を参考に、MovableTypeテンプレートを使って .htaccess に追加すべき内容を生成する。

mod_rewrite を使ってもいい。

僕の場合は、結局全てのアーカイブリダイレクトmod_rewrite を使って行うことにした。

例えば、カテゴリーアーカイブリダイレクト用の文字列を生成するテンプレートはこんな感じ。カテゴリー名にスペースが含まれているとエラーになるので、その場合は「-」に置き換えるなどの処理をしている。参考までに。

<html>
<MTSubCategories>
<MTIfNonZero tag="MTCategoryCount">
<?php
$link="<$MTCategoryArchiveLink$>";
//$label=urlencode("<$MTCategoryLabel$>");
$label="<$MTCategoryLabel$>";
?>
RewriteRule ^<?php echo(substr($link,34)); ?> http://newsite.com/blog/category/<?php echo(mb_ereg_replace(" ","-",$label)); ?> [L]<br>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="5">
</MTSubCategories>
</html>

仕上げ

mod_rewrite を使う。