現状できたところまでのメモがてら。
もっとスマートな方法があると思います。これは何故かCSVでインポートできない人のための力技です
現状の自分の条件
- CSVでデータ移行しようとすると想定外の箇所で区切られてタイトルと日付がくっつくような謎なデータ異常が起きる
- entryがだいたい700件ぐらい、ページが1000弱ぐらい
- freoのデータはMySQLで作成している
freoからWordPressに変更する理由
- PHP8に正式対応していない
- 対応したとしてもかなり自分の好き勝手に弄り倒しているので今更修正や書き換えが対応できる気がしない
- 自分のレンタルしているサーバーがPHP8に対応した
変更後の想定
- 今までentryで行っていたブログはWordPressでは通常の投稿で行う
- 今までpageで行っていた小説や同人誌一覧などはカスタム投稿タイプを使用して行う
現状の行った流れ
※かなり自己流+ちから技がエグいので、できる人は自力でどうにかできないか試したほうが良いです
そのままデータをぶち込むのは失敗した際がとてもとても怖いので、LocalでローカルのWordPressを作成し、こちらで移行データを全部作成してからAll-in-One WP Migrationのプラグインでデータを一括移行し、その後はサーバー上のデータで使用することにする。
phpMyAdminからCSVでデータを出力する

まずはentryから作業する。
出力するのは下記
- freo_entries
- freo_categories
- freo_category_sets
CSVで出力したものをgoogleドライブ経由でgoogleスプレッドシートで開く
ある人はExcelでもなんでも好きにしてくれ。わたしはExcel非所持なのでgoogleスプレッドシートで開いた。
freo_entriesを開いたらファイル>インポート>googleドライブ内のファイル指定する際にCSVを選ぶ→インポート場所で「新しいシートに挿入」でfreo_categoriesとfreo_category_setsを追加で挿入する
entryにcategoryを紐づける
スプレッドシートのVLOOKUPを使用して、freo_categoriesのカテゴリー名(name)をfreo_category_setsの横に表示させる。
2つ3つあるものはなんかいい感じに結合させる。
自分の場合は、if(上の行とentry_idが同じ,上の行のカテゴリー名&”,”&この行のカテゴリー名,この行のカテゴリー名)でまとめた。
その上で全選択して範囲の並び替え→キーをentry_idの行A→Zと上記if文でカテゴリー名を結合させた行Z→Aにする。
更にデータ>データクリーンアップ>重複の削除で必要そうなのだけ残った。
その上で、freo_entriesのidを使ってVLOOKUPでカテゴリ名を取得して横に表示させておく
entryから必要そうな列だけ残していらないのは削除する
自分の場合は下記だけ残した
- datetime
- status
- title
- text
- 無理矢理ねじ込んだカテゴリー名
データをxml用に整形する
この手間がなければCSVで全部ぶっこめたんだよ。
スプレッドシートでいい感じに整形する。
最終的には下記の形にしたい。titleやcontentなどは順不同。
<item>
<title><![CDATA[★ここにタイトル★]]></title>
<content><![CDATA[★ここに本文★]]></content>
<date><![CDATA[★ここに日付★]]></date>
<status><![CDATA[★ここに公開状況★]]></status>
<category><![CDATA[★ここにカテゴリ★]]></category>
</item>
列と列の間に1列追加し、ちまちまと<item>★★★<title><
これでデータが取り込める。カテゴリーは事前に作っておかなくとも無いのはいい感じに取り込んでくれる(ただしスラッグとかそこらへんは死んでる)。
お疲れ様でした、力技でentryは取り込めました。
pageも行う作業としてはほぼ同様で、R18指定とかなんとかをオプションでやってる場合はそれをいい感じに自力でどうにか追加してどうにかするとどうにかなる。
何度も各けどCSVでやれそうならCSVでやったほうが早い。
コメント