ライブドアブログではカテゴリに親子の階層を持たせていましたが、WordPressにMovable Type・TypePad インポートツールでインポートするとカテゴリの親子の階層がフラットになってしまいました。WordPressでは記事がもとの親カテゴリと子カテゴリの両方(階層はフラット)に属するように登録されてしまっています。ライブドアブログからWordPressに移行するのはネット情報で大体できそうな感覚をもっていたので想定外でした。
引越しの全体の流れはざっとこんな感じでした
1.新しいサーバーにWordPressをセットアップ
2.ローカルPCから新しいサーバーのWordPressにアクセスできるようにhostsファイルにサーバーのIPアドレスとドメインを追加
3.WordPressのパーマリンク変更
カスタム構造で、/archives/%postname%.html を設定
4.ライブドアブログから全ブログ記事のバックアップをとる。Movable Typeという形式になります。
5.4.のバックアップファイルから画像のリンクのパスのリストを抜き出し、ライブドアブログでの画像のパスのimgs以下の階層を保つようにして画像ファイルをダウンロード
6.4.のバックアップファイル内の画像リンクのパスをWordPressのディレクトリ wp-content/uploads以下に変更。WordPressのディレクトリwp-content/uploadsに画像ファイル一式をもともとの階層を保ちつつアップロード
7.WordpressのMovable Type・TypePad インポートツールプラグインが次の3点で駄目なので、movabletype-importer.phpファイルを修正(後に詳細)
・ 長い記事が途中で切れてしまう(ネットの情報で事前に把握)
・タグが登録されない(ネットの情報で事前に把握)
・ カテゴリの階層がなくなってしまう(やってみて初めて気がつく)
そのままではカテゴリの親子関係がフラット化されてしまいました。ネット上で解決方法を見つけられず自分でmovabletype-importer.phpファイルの修正方法を考える羽目に。
8.Movable Type・TypePad インポートツールプラグインをつかって、4.の全記事のファイルをインポート
9.WordPressに引越しができたことを確認しDNSを切り替え、ローカルPCのhostsファイルを元に戻す。
WordPressのMovable Type・TypePad インポートツールプラグインの変更内容
長い記事が途中で切れてしまわないようにする修正
function fgets($fp, $len=8192) {
if ( $this->has_gzip() )
return gzgets($fp, $len);
return fgets($fp, $len);
}
↓
function fgets($fp, $len=81920) {
if ( $this->has_gzip() )
return gzgets($fp, $len);
return fgets($fp, $len);
}
タグが登録されるようにする修正
} else if ( 0 === strpos($line, ‘BLOG NAME:’) ) {
$blog = trim( substr($line, strlen(‘BLOG NAME:’)) );
$ping->comment_author = $blog;
} else {
// Processing multi-line field, check context.
↓
} else if ( 0 === strpos($line, ‘BLOG NAME:’) ) {
$blog = trim( substr($line, strlen(‘BLOG NAME:’)) );
$ping->comment_author = $blog;
} else if ( 0 === strpos($line, “TAG:”) ) {
$tags = trim( substr($line, strlen(“TAG:”)) );
if ( ” != $tags ) {
$post->post_keywords .= str_replace(‘”‘, ”, $tags);
}
} else {
// Processing multi-line field, check context.
カテゴリの親子の階層を保つようにする修正
// Add categories.
if ( 0 != count($post->categories) ) {
wp_create_categories($post->categories, $post_id);
}
↓
// Add categories.
if ( 0 != count($post->categories) ) {
//Hierarchy categories
$cat_ids = array ();
if ( 2 == count($post->categories) ) { //Only parent category
if ( $cat_id = category_exists( $post->categories[0] ) ) {
$cat_ids[] = $cat_id;
} elseif ( $cat_id = wp_create_category( $post->categories[0] ) ) {
$cat_ids[] = $cat_id;
}
} else { //Parent and child categories
if ( $parent_cat_id = category_exists( $post->categories[0] ) ) {
} else {
$parent_cat_id = wp_create_category( $post->categories[0] );
}
if ( $cat_id = category_exists( $post->categories[2], $parent_cat_id ) ) {
$cat_ids[] = $cat_id;
} elseif ( $cat_id = wp_create_category( $post->categories[2], $parent_cat_id ) ) {
$cat_ids[] = $cat_id;
}
}
wp_set_post_categories($post_id, $cat_ids);
}
// Add tags or keywords
1つ目と2つ目はネットから情報を得ましたが、3つ目(カテゴリの親子)は自分で書きました。実はこれがPHPのコーディングデビューです。所望の動作をしているようですので大丈夫でしょう。適用するときは必要に応じてバックアップをとる等で保険を掛けてください。
※WordPressで ウィジェット→カテゴリ で「階層を表示」にチェックを付けていないと、インポートした後にカテゴリの階層表示になりません。
記事をインポートしたあとにもいろいろと・・・
上記以外にもWordPress上で日本語のスラッグを英語に変更したり、バックアップをとっておくといった作業が必要でした。バックアップはUpdraftPlusプラグインを試してみたところ簡単にバックアップと復元ができることがわかったので、これを使うことにしました。
というわけで、ライブドアブログからWordPressを使ったブログに引越ししてしまいました。
最後に
そもそものきっかけは、スマートフォンで自分のサイトを見てみると何やら広告がいっぱい。自分はそんなに多くは貼っていないのに無料ブログの代償なんでしょうか、ライブドア側で広告が挿入されるんですね。というわけで一度は試してみたいと思っていたのでサーバーを借りてWordPressに移行を決断した次第。
途中ハマりもしましたが、なんとか引越しできたようです。
数ヶ月様子をみてまたライブドアブログに戻るかもしれないし、このままWordPressで続けているかもしれない。
WordPressを使うのは初めて、PHPも初めてなので???なことばかりですが少しづつなれていきたいです。