[WordPress] Really Simple CSV Importerでハマったエラーまとめ
- 数百、数千件のカスタムフィールド付き投稿データを入力するときに便利なプラグイン「Really Simple CSV Importer」
- とても便利ですが、正しくCSVファイルを作らないとインポートできませんし、インポートできてもデータがずれてしまったりします
- 本記事で自分がつまずいたあれこれをまとめておきたいと思います
正しくインポートできる最小構成のサンプル
"post_type","post_status","post_title"
"post","publish","テスト "
- インポート時に少なくとも必要(と思われる)3つの要素だけをまとめたデータです
- まずは最小構成でインポートができるかチェックしてから、必要な要素を付け足していくと問題発生時の原因が特定しやすくなります
- 「post_type」は投稿タイプの指定です。普通の投稿の場合は「post」、固定ページの場合は「page」、カスタム投稿タイプの場合はそのスラッグ名を指定します
- 「post_status」は公開状態の指定です。無指定の場合はdraft(下書き)として扱われてしまうため、「publish」と指定しておきます
- 「post_title」は記事のタイトルとなります
「データベースに投稿を追加できませんでした WP_Postオブジェクトがセットされていません。」と表示される
- CSVファイルの文字コードが間違っている場合のエラーです
- 「Really Simple CSV Importer」は「UTF-8」の文字コードで作成されたCSVファイルでなければインポートできません(ただし、データに全角文字がない場合はインポートできてしまいます)
- ExcelでCSVファイルを作成すると、気づかず文字コードが「SJIS」になってしまうことがあるため注意が必要です
- LibreOfficeというソフトでCSVファイルを作成することが推奨されていますが、私の場合は①テキストエディタでUTF-8形式に保存したCSVファイルを作成→②Excelで作成した表データをペースト→③タブを「,」に置換という流れで作成しました
「"publish" は不正な投稿タイプです。」と表示される
"post_title","post_type","post_status"
"テスト","post","publish"
- CSVに記載するデータの順番が間違っている場合のエラーです
- 上記のサンプルは「post_title」「post_type」「post_status」という順番になっていますがこれはNG
- 「post_type」「post_status」「post_title」という順番で記載しましょう
post_typeを指定しているのに「注: 可能な場合 post_type 値を記載してください。」という警告が出て、指定したpost_typeではなく「投稿」にインポートされてしまう
- インポートしたCSVファイルがBOM付きだったことが原因でした。BOMなしの形式で作成し直してインポートすることで解決しました。
エラーなしで完了したがデータがインポートされていない
"post_type","post_status","post_title"
"post","publish","テスト"
- CSVデータの末尾に空改行が必要です
- テキストエディタに貼り付けてCSVファイルを作成している場合には注意しましょう
"post_type","post_status","post_title"
"post","publish","テスト"
インポートしたデータがずれてしまう
- データが別の列にずれこんで入ってしまうケース。要因が色々ありえます
文字列データを「""」で囲んでいない
post_type,post_status,post_title
post,publish,テスト
- 「""」なしでもそこそこインポートできてしまう(全角文字がなければ行ける?)ので、ハマるとなかなか気が付きにくいです
データに「"」が入っている
"post_type","post_status","post_title"
"post","publish","テスト"テスト"
- 「"」はデータの区切りを表すため、データの中に混在しているとずれの要因になります
- 「"」の前に「¥」を入れてエスケープすることで対処できます
- ちなみに「,」は混在していても問題ありませんでした
"post_type","post_status","post_title"
"post","publish","テスト¥"テスト"
全角文字でデータが終わる場合は半角スペースを入れる
"post_type","post_status","post_title"
"post","publish","テスト"
- データの終わりが全角文字だと、データの区切りがうまく処理されないようです(上記サンプルの「テス"ト"」)
- 全角文字が含まれていてもデータの終わりが半角文字なら問題ありません
- 対策として、全角文字が含まれる(可能性のあるデータ)には末尾に半角スペースを入れます
"post_type","post_status","post_title"
"post","publish","テスト "
複数のカテゴリーをインポートする
"post_type","post_status","post_title","post_category"
"post","publish","テスト ","cat_xxx,cat_yyy"
- インポートできない話とは少しそれますが、ちょっと迷った点として紹介
- 複数のカテゴリーをインポートするときは素直に「,」区切りで入力すればOKです
複数のタクソノミー(ターム)をインポートする
"post_type","post_status","post_title","tax_sample"
"product","publish","テスト ","ts_xxx,ts_yyy"
- タクソノミーの場合は「tax_{タクソノミースラッグ名}」で列を作成します
- サンプルでは、「product」というカスタム投稿タイプに「sample」というタクソノミーの「ts_xxx」と「ts_yyy」の2つのタームを登録しています
Excelでデータを作る場合のポイント
- Excelでデータを作る場合は、データを「""」で囲むために関数を使うと楽です
="""" & A1 & """"
- 全角文字が入るセルには「""」で囲んだ上に半角スペースを入れるため、次のような関数を使います
="""" & A1 & " """
- 複数行に改行されたセルは、テキストエディタにコピペすると二重のダブルクオーテーション「""~""」で囲まれるため、結果的にコピペしたデータが「"""~"""」このような形になります。これをただの「"~"」の形に戻す必要があります
- ですので、テキストエディタにコピペしたあとに以下の置換作業を行います
- タブを「,」に置換
- 「"""」を「"」に置換
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。