MovableTypeからWordPressへのURL込みの移行方法
出典: Wiki@browncat.org
目次 |
[編集] MovableTypeからWordPressへの移行
ブログサーバソフトのWordPress 2.2(.x)にMovableType 3.35j からパーマリンク=URLを引き継ぎ、同時にMovableTypeにあってWordPressにないキーワードやタグのデータも一緒に引越しするための方法です。WordPressは今おそらく最も世界中で使われているblogソフトで、豊富なテンプレートやプラグインと時間のかかる再構築が必要なくインストールが容易という点がMovableTypeに対する大きなアドバンテージです。
WordPressには標準で強力なインポート機能がついており、かなり多くの種類のblogソフトからのインポートが出来ます。もちろんMovableTypeからも"書き出し"してWordPressでインポートするだけで記事の移行を行うことが出来ます。
しかし残念ながらMovableTypeの書き出しデータに足らない情報があり、記事のURLが変わってしまいます。外部からのリンクが切れたりサーチエンジンでの検索にも良くないなど、パーマリンクが変化するのは余り嬉しくありません。というかパーマリンクという名前からして変化させたいものではありませんよね。
またMovableTypeにあってWordPressには標準でない機能であるmeta keywordsとエントリタグもせっかく入力したのであれば移行したいものです。
そこでMovableType及びWordPress双方にパッチを当てて記事のURLも含め移行してみます。拡張機能はプラグインを利用して実現します。(もちろん不要な方も問題ありません)
以下の関連ブログエントリのまとめです。
[編集] 前提条件
- WordPressのサーバにapacheを使用していること
- WordPressディレクトリの.htaccessに書き込む権限があること。
- 作業を楽にするにはapacheから書き込みできること
- mod_rewriteが使用できること
- WordPressのプラグインとして使うのは
- meta/description Add Meta Tags
- 又は All in One SEO Pack
- Tag Ultimate Tag Warrior 3.141592
[編集] WordPressの設定
WordPressのパーマリンクの設定を行いMovableType互換のパーマリンクにします。 この形式にしておくと、逆にWordPressからMovableTypeに移行するor戻る際にも楽だと思います。
- 管理画面の[各種設定]から
- [パーマリンク設定]画面へ
- "一般的な表示:"の"独自表記を以下の入力欄に記述"をチェック
カスタム構造 入力欄に以下の文字列を入力します。(これはMovableTypeデフォルトですが、カスタマイズされている場合は適宜変更して下さい)
/%year%/%monthnum%/%postname%.html
"パーマリンク構造を更新"ボタンを押します。
webサーバから.htaccessへの書き込み権限がない場合には、表示されるガイダンスに従い.htaccessを作成/更新して下さい。
[編集] MovableTypeへのパッチ
MovableTypeのCGIのディレクトリを$MTとします。(EntryIDはとりあえず書き出しておきますが現在未使用です)
$MT/lib/MT/ImportExport.pm:541行目に以下の4行を追加 PERMALINK: <$MTEntryPermalink$> <MTEntryIfTagged> TAGS: <MTEntryTags glue=","><$MTTagName$></MTEntryTags></MTEntryIfTagged> ID: <$MTEntryID$>
[編集] WordPressへのパッチ
WordPressのインストールディレクトリを$WPとします。 $WP/wp-admin/import/mt.phpをエディタなどで開いて修正します。 エラーなどを一切考えていないのは手抜きです。
189行目に変数のクリア追加 $post_name = ""; $post_entrytags = "";
200行目からの3行を以下のように修正
// We want the keywords
preg_match("|-----\nKEYWORDS:(.*)|s", $post, $keywords);
$post_keywords = trim($keywords[1]);
$post_keywords = preg_replace("|\n*-----|s", "", $post_keywords);
$post_keywords = $wpdb->escape($post_keywords);
$post = preg_replace("|(-----\nKEYWORDS:.*)|s", "", $post);
282行のdefault:の前に以下のブロックを追加
case 'PERMALINK' :
$tmpvalue = strrchr($value,"/");
$post_name = substr($tmpvalue, 0, strpos($tmpvalue, "."));
break;
case 'TAGS' :
if (! empty ($value) )
$post_entrytags = $wpdb->escape($value);
break;
306行目を以下のように修正。要は最後に'post_name'を付け足すだけです。
$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');
312行目のカテゴリ追加の後に以下のブロックを追加
// add additional info as custom field
if ("" != trim($post_keywords)) {
add_post_meta($post_id, 'keywords', $post_keywords);
}
if ("" != trim($post_entrytags)) {
add_post_meta($post_id, 'entrytags', $post_entrytags);
}
[編集] データの移行
以上で準備は終わったので、blogのデータを移行します。
[編集] MovableTypeのデータをエクスポート
- MovableTypeの管理画面の"読み込み・書き出し"メニュー
- "エントリーの書き出し"タブを選ぶ
- "書き出し"を押します。
- テキスト形式のファイルがエクスポートされるので適当に保存します。
[編集] WordPressにインポート
- WordPressの管理画面から"管理"を選択
- "インポート"タブを選択
- 一覧からMovableType/TypePadを選ぶ
- MovableTypeからエクスポートしたファイルを送信
- あっけなく終わります。
以上です。
[編集] meta keywords/meta descriptionの移行
上記作業でデータは移行完了しています。管理画面からインポートされた記事を見たときに、カスタムフィールドのkeywordsにMovableType側で入力したキーワードの値が入っているはずです。取り込んだデータは以下の2種類のプラグインで使用できます。
[編集] Add Meta Tags
Add-Meta-Tagsプラグインを有効にして、個別エントリのソースを確認します。ヘッダ部分にmeta keywordsとmeta descriptionの値がちゃんと入っていれば成功です。
Add Meta Tagプラグインの機能とこのパッチとの関連をざくっと説明すると
- このプラグインでは以下のルールでmeta keywords, descriptionを付加してくれます。
- keywords -- custom fieldのkeywordsを使用、フィールドがなければデフォルトでカテゴリ名を使う。MovableTypeのエクスポートはkeywordsを出力していますがWP側で捨てているのでカスタムフィールド'keywords'を追加する。
- description -- custom fieldのdescription、excerpt(WordPress:抜粋表示オプション、MovableType:抜粋(概要))、内容自動抜粋の順に探す。トップページはタグラインから取得する模様。WordPress/MovableTpe両方ともExcerptがdescriptionに使われるので、入力されていればそのままインポートするだけで出力されます。
[編集] All in One SEO Pack
All in One SEO PACKをプラグインを有効にします。
このプラグインも基本的にAdd Meta Tagsと同じフィールドと方法を使うことが出来ます。
- 以下のルールでmetaを生成します。
- keywords -- Add-Meta-Tagsと同じくカスタムフィールドのkeywordsからmeta keywordsを出力してくれます。
- description -- やはりexcerpt(抜粋)から生成出来ます。[各種設定]-[All In One SEO]の画面で"Autogenerate description"をチェックします。抜粋がない場合には自動生成です。
- 他にもタイトルの書き換えなどの機能があります。
[編集] タグ情報の移行
MovableTypeからWordPressへ移行したい情報には他にもエントリータグがあります。 上記パッチでエントリータグの情報がカスタムフィールドentrytagsに取りこめているはずです。
- WordPressには標準ではタグ機能がないため拡張機能が必要
- おそらく最もポピュラーらしきUltimate Tag Warrier(以下UTW)を使う
- UTWはカスタムフィールドからタグを取りこめるので、取り込んだカスタムフィールドからインポートする。
- UTWへのパッチ
カスタムタグからのインポート時にエラーが出るので'+'の二行を追加します。
$WP/wp-content/plugins/UltimateTagWarrior/Uultimate-tag-warrior-core.php:319
+if (0 != count($allExisting)) {
foreach ($allExisting as $existing) {
$items = explode($separator, $existing);
foreach ($items as $tag) {
$alltags[] = str_replace(" ", "-", trim($tag));
}
}
+}
- TagsタブからCustom Fieldのentrytagsから','を区切り文字にしてインポートを実行
- 管理画面からタグの入ったエントリを確認して、無事UTWのタグが追加されていれば完了です。
[編集] その他
以上で私的に欲しいデータは概ね移行できそうです。
少し気になるところなどをメモ。
- WordPressではtrackback/commentが分かれていないのがMovableType使いには気持ち悪いのですが、テーマwp.vicunaではちゃんと分かれています。widget対応したwp.vicuna.extというのもあります。分けるためのプラグインもありますが、補助的関数が増えるだけ?
ご意見や情報がございましたらblogへのコメント、トラックバック、メールなどをいただけるとありがたいです。