こんにちは、オンラインの金沢です。
今回は、最近行ったMovable TypeからWordPressへの移行方法について書きます。
Movable Typeとは、シックス・アパート社が開発・提供するCMSプラットフォームです。私もまだまだ経験が浅く、WordPressくらいしか使ったことがなかったので初めて触りました。WordPressと大きく異なる点は出力がPHPファイルではなく、HTMLファイルを生成して公開しているところです。それならシステムエラーが生じても公開済みページに悪影響を与えることがなく安全ですね。
WordPressへの移行の基本的な方法はWordPress Codexに書いてありました。
「Movable Type から WordPress への移行 – WordPress Codex 日本語版」
そのままでも移行はできたのですが、記事のパーマリンクが移行前後で変わってしまいました。このままだと以前のURLでアクセスされると404エラーになってしまいますので、少し工夫をしてインポートし直しました。設定により手法が変わるかもしれませんが、参考までにメモしておきます。Movable Typeのバージョンは4.1で、WordPressは4.1.1になります。
まず、Movable Typeの記事の登録項目でパーマリンクの代わりになる設定値は「出力ファイル名」になります。公開時に、この名前で月別ディレクトリにファイルが生成されるようです。しかし、デフォルトの設定だと”_”の記号が”-“に代わってしまうそうで、出力ファイル名が”post_123″の記事が”post-123.html”で出力されていました。
インポート時に「出力ファイル名」は「スラッグ」に登録されるのですが、上記の理由から”_”を”-“に変換するようにインポートのシステムファイルを修整する必要がありました。インポートはプラグインで行われますので、「Movable Type and TypePad Importer」のmovabletype-importer.phpを書き換えました。387~390行目の
} else if ( 0 === strpos($line, 'BASENAME:') ) { $slug = trim( substr($line, strlen('BASENAME:')) ); if ( !empty( $slug ) ) { $post->post_name = $slug;
がエクスポートファイルに記述された各記事の「出力ファイル名」を、新規投稿用オブジェクト$postの「スラッグ」に該当するプロパティpost_nameに代入する場所です。390行目を
$post->post_name = str_replace( '_', '-', $slug );
と書き換えます。これでインポートすればWordPress側の「スラッグ」がMovable Typeが生成したファイル名と同じになります。
また、URLに”.html”が付いていても404エラーになりますので、リライトルールを追加して拡張子を取り除きます。functions.phpに下記のようなコードを追加してください。
function custom_rewrite_basic() { add_rewrite_rule( '(.*)\.html$', '$1 [R=301,L]' ); } add_action('init', 'custom_rewrite_basic');
そして、パーマリンクの設定を更新するとトップディレクトリのhtaccessファイルが更新されますので、リライトルールが適応されます。
最後に、Movable Typeは記事のファイルを月別ディレクトリに入れていましたので、それに合わせてパーマリンク設定を変更します。
/%year%/%monthnum%/%postname%
これで投稿のパーマリンクが「/年/月/スラッグ」となりますので、完了となります。”%postname%”を”%post_id%”(投稿ID)でもリダイレクトしてくれますが、もとのファイル名が数字だけの場合に404エラーになりました。「スラッグ」が数字でもIDでリクエストされたと思われてしまうようです。
WordPress以外のCMSやリライトルールなど、知らないことが多くて勉強になりました。Webプログラムはまだまだ奥が深いことを痛感しております。
金沢
参考
WordPress Codex日本語版 | add_rewrite_rule
.htaccessによるURLの書き換え Rewrite(リライト)