MovableTypeからWordPressへ引っ越し
今回、Movable Type Pro 5.2.6からWordpress 4.0への移行過程をメモしておきます。
まず、MovableTypeのエクスポートを行ってみる・・・。ん、何かが足りてない。そうなんです、パーマリンクとかかサックリなくなっています。このままじゃいけないというので検索してみた、ありました。
下記の操作の前に、必ずバックアップを取ってください。
MovableTypeからWordPressへの完全移行方法
どうやら/lib/MT/ImportExport.pmを変更するらしい。
[perl highlight="2,3,4″]
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$>
[/perl]
上記の「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編集。
[php highlight="27,28,29,30″]
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);
}
}
…中略…
}
[/php]
[php highlight="14,34,42,51,52″]
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;
…中略…
}
}
…中略…
}
[/php]
上記に加えて
[php highlight="8,9,10,11,12,13″]
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:’) ) {
[/php]
これでインポートの準備は完了。
MovableTypeが出力したhtmlファイル(PHP化されている方はphp)ファイルを削除して、それトップページを見てみましょう。
ん~いい感じだけど、パーマリンクが・・・・・・エクスポートしたはずなのに・・・。
んで、Wordpressの管理画面を開いて、[設定][パーマリンクの設定]を開きます。
私の場合は年月で記事を吐き出していたので、カスタム構造を選択し
/archives/%year%/%monthnum%/%postname%.php
な感じです。無事にパーマリンクを引き継げました。
あとは、MovableTypeで管理していた画像たちWordpressのメディアに登録し、Movabletypeの痕跡を消してしまいましょう。
MT形式からWordPressへ移行した際に画像をインポートするプラグイン
ダウンロードして、FTPなどでアップし、プラグインを有効化し、実行、停止、削除、これだけです。
記事に埋め込まれているURLもしっかりと書き換えてくれる優れもの。
確認後は、バッサリ消してしまいます。
このブログのURLの中身は.htaccessとindex.php、favicon.ico、そしてメディアとして登録されたuploadsのみです。
だらだら書きましたが、これで全てです。