MovableTypeからWordPressへ引っ越し

今回、Movable Type Pro 5.2.6からWordpress 4.0への移行過程をメモしておきます。

まず、MovableTypeのエクスポートを行ってみる・・・。ん、何かが足りてない。そうなんです、パーマリンクとかかサックリなくなっています。このままじゃいけないというので検索してみた、ありました。

下記の操作の前に、必ずバックアップを取ってください。

MovableTypeからWordPressへの完全移行方法

どうやら/lib/MT/ImportExport.pmを変更するらしい。

DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$><MTEntryIfTagged include_private="1">
PERMALINK: <$MTEntryPermalink$>
TAGS: <MTEntryTags include_private="1" glue=","><$MTTagName quote="1"$></MTEntryTags></MTEntryIfTagged>
ID: <$MTEntryID$>

上記の「DATE:」という記述を探し、その下に「PERMALINK」「EntryIfTagged」「ID」の行を追加します。

後はエクスポートです。

エクスポートしたファイルを眺めていると、あれ、パーマリンクの「post-1」などが「post_1」に変わっているではありませんか。これじゃ困るので置換しましょう。

テキストエディタなどで「BASENAME: post_」を「BASENAME: post-」に変換し保存します。安全のため、ファイル名を変更して保存します。

下準備はできたので、Wordpress側のインポートのプログラムを編集しましょう。

WordPress 3.0にMovable Typeのタグをインポートする

まるっと転載させて頂きます。

wp-content/movabletype-importer配下にある、movabletype-importer.php編集。

function save_post(&$post, &$comments, &$pings, &$tags) {
$post = get_object_vars($post);
$post = add_magic_quotes($post);
$post = (object) $post;

if ( $post_id = post_exists($post->post_title, '', $post->post_date) ) {
echo '<li>';
printf(__('Post <em>%s</em> already exists.', 'movabletype-importer'), stripslashes($post->post_title));
} else {
echo '<li>';
printf(__('Importing post <em>%s</em>...', 'movabletype-importer'), stripslashes($post->post_title));

if ( '' != trim( $post->extended ) )
$post->post_content .= "n<!--more-->n$post->extended";

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

// Add categories.
if ( 0 != count($post->categories) ) {
wp_create_categories($post->categories, $post_id);
}

// Add tags or keywords
if ( 1 < strlen($tags) ) {
// Keywords exist.
printf('<br />'.__('Adding tags <em>%s</em>...', 'movabletype-importer'), stripslashes($tags));
wp_add_post_tags($post_id, $tags);
}
}
…中略…
}
function process_posts() {
global $wpdb;

$handle = $this->fopen($this->file, 'r');
if ( $handle == null )
return false;

$context = '';
$post = new StdClass();
$comment = new StdClass();
$comments = array();
$ping = new StdClass();
$pings = array();
$tags = '';

echo "<div class='wrap'><ol>";

while ( $line = $this->fgets($handle) ) {
$line = trim($line);

if ( '-----' == $line ) {
// Finishing a multi-line field
if ( 'comment' == $context ) {
$comments[] = $comment;
$comment = new StdClass();
} else if ( 'ping' == $context ) {
$pings[] = $ping;
$ping = new StdClass();
}
$context = '';
} else if ( '--------' == $line ) {
// Finishing a post.
$context = '';
$result = $this->save_post($post, $comments, $pings, $tags);
if ( is_wp_error( $result ) )
return $result;
$post = new StdClass;
$comment = new StdClass();
$ping = new StdClass();
$comments = array();
$pings = array();
$tags = '';
} else if ( 'BODY:' == $line ) {

…中略…

} else if ( 0 === strpos($line, "CATEGORY:") ) {
$category = trim( substr($line, strlen("CATEGORY:")) );
if ( '' != $category )
$post->categories[] = $category;
} else if ( 0 === strpos($line, "TAGS:") ) {
$tags = trim( substr($line, strlen("TAGS:")) );
} else if ( 0 === strpos($line, "PRIMARY CATEGORY:") ) {
$category = trim( substr($line, strlen("PRIMARY CATEGORY:")) );
if ( '' != $category )
$post->categories[] = $category;
…中略…
}
}
…中略…
}

上記に加えて

function process_posts() {
global $wpdb;

…中略…

} else if ( 'COMMENT:' == $line ) {

$context = 'comment';
} else if ( 'PING:' == $line ) {
$context = 'ping';
} else if ( 0 === strpos($line, "PERMALINK:") ) {
$value = trim( substr($line, strlen("PERMALINK:")) );
$tmpvalue = strrchr($value,"/");
$post->post_name = substr($tmpvalue, 0, strpos($tmpvalue, "."));
} else if ( 0 === strpos($line, "TAGS:") ) {
ns/movabletype-importer$tags = trim( substr($line, strlen("TAGS:")) );
} else if ( 0 === strpos($line, 'AUTHOR:') ) {

これでインポートの準備は完了。

MovableTypeが出力したhtmlファイル(PHP化されている方はphp)ファイルを削除して、それトップページを見てみましょう。

ん~いい感じだけど、パーマリンクが・・・・・・エクスポートしたはずなのに・・・。

んで、Wordpressの管理画面を開いて、[設定][パーマリンクの設定]を開きます。

私の場合は年月で記事を吐き出していたので、カスタム構造を選択し

/archives/%year%/%monthnum%/%postname%.php

な感じです。無事にパーマリンクを引き継げました。

あとは、MovableTypeで管理していた画像たちWordpressのメディアに登録し、Movabletypeの痕跡を消してしまいましょう。

MT形式からWordPressへ移行した際に画像をインポートするプラグイン

ダウンロードして、FTPなどでアップし、プラグインを有効化し、実行、停止、削除、これだけです。

記事に埋め込まれているURLもしっかりと書き換えてくれる優れもの。

確認後は、バッサリ消してしまいます。

このブログのURLの中身は.htaccessとindex.php、favicon.ico、そしてメディアとして登録されたuploadsのみです。

だらだら書きましたが、これで全てです。

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です