Really Simple CSV Importerは、CSVファイルをインポートして一括で投稿を登録できる便利なプラグインですが、ACFでチェックボックスを使用していると上手く読み込むことでできません。
というのも、ACFのチェックボックスはDBに保存される値がa:1:{i:0;s:0:"";}のような値になってしまうためです。
例えば、ACFで以下のようにチェックボックスを設定しているとします。
- red:赤
- blue:青
- green:緑
上記の選択肢から赤と青を選択した場合、DBに保存される値はa:1:{i:0;s:0:"red";i:1;s:1:"blue";}のような値になってしまいます。
CSVファイルに「red,blue」とカンマ区切りで指定すればいけそうですが、DBに保存されている値がおかしいため、これでは上手く読み込まれません。
「red,blue」ではなく「a:1:{i:0;s:0:"red";i:1;s:1:"blue";}」と指定すれば上手く読み込まれますが、こんなことはいちいちやってられないです。そこで、Really Simple CSV Importerのフィルターフック「really_simple_csv_importer_save_meta」を使ってACFの値をパースしてあげます。
function rsci_meta_filter( $meta, $post, $is_update ) {
foreach ($meta as $key => $value) {
// checkeboxフィールドの場合
if($key == 'checkebox_field_key') {
// $valueが空の場合、データに a:1:{i:0;s:0:"";} という空データが入ってしまうため
// 空ではない場合にパースする
if ($value != "") {
$meta[$key] = preg_split("/,+/", $value);
} else {
$meta_array[$key] = "";
}
}
return $meta;
}
add_filter( 'really_simple_csv_importer_save_meta', 'rsci_meta_filter', 10, 3 );
このようにすることで、チェックボックスの値もちゃんと読み込む事ができます。