アドバンストカスタムフィールドの複数選択チェックボックスの値をCSVインポートする

サイトの移行や記事に新しい属性を追加するときに、「カスタムフィールドを含む記事レコードの一括インポート」をする方法について、以前紹介したことがあります。
その紹介記事の中では、内容を単純にするために、カスタムフィールドのタイプは「テキスト」一種類として紹介しましたが、今回はカスタムフィールドのタイプに「複数選択ありのチェックボックス」が含まれるケースについて、以前の紹介記事の追加情報としてご紹介したいと思います。
したがって、事前に「カスタムフィールドを含む記事レコードの一括インポート」を読んだうえで今回の事例をご覧ください。使うプラグインや条件なども同じなので、今回は説明を省略します。
複数選択がある場合のCSV上の値としてはカンマ区切りが一般的で、カテゴリやタクソノミーについてはこのカンマ区切りの値がCSVインポートでも有効です。
例)”category01,category02,category03″
しかしながら、カスタムフィールドではこのカンマ区切りが使えません(カンマも値の一部と認識されてしまいます)。
そこで、カンマを値の区切りの記号として認識させ、その前後を別の値としてインポートできるようなちょっとした細工が必要です。その細工をテーマの function.php に追記するのが一番最初の作業になります。
あらかじめそのチェックボックス型のカスタムフィールドのField Keysを用意してください。
用意できたら「Really Simple CSV Importer」の really_simple_csv_importer_save_meta のフィルターフックを記述します。
functions.php
function really_simple_csv_importer_checkbox( $meta, $post, $is_update )
{
foreach ($meta as $key => $value) {
if ($key == 'field_XXXXXXX') { //field_XXXXXXXには対象のカスタムフィールドのField Keysを入れる
if ($value != "") {
$meta[$key] = preg_split("/,+/", $value);
} else {
$meta_array[$key] = "";
}
}
return $meta;
}
}
add_filter( 'really_simple_csv_importer_save_meta', 'really_simple_csv_importer_checkbox', 10, 3 );
これで完了です。
あとは対象のカスタムフィールドの値のところを、カンマ区切りで入れればOKです。
当然ですが、カンマ区切りがCSV上の値の区切りと間違われないように、” ” で囲うことを忘れずに。
(最新のエクセルからCSV出力すれば自動で値を ” ” で囲ってくれます)