Really Simple CSV ImporterでCSVインポート時のデータ整形

Really Simple CSV ImporterでCSVインポート時のデータ整形

WordPressでデータをCSVインポートするとき、
Really Simple CSV Importer
というプラグインを利用すると
Advanced Custom Fieldとも相性が良く、細々調整効いて便利です。

ざっくり、やり方は以下の通り。
1.CSV作る(utf-8、ダブルクオート囲み)
 ・CSV自体はエクセルで作っちゃう
 ・Cassava Editor(CSVエディタ)で
  文字コードをUTF-8にする。
  オプションでクオートで囲むよう設定しておいて保存する。

2.データ整形を行うプラグインを作る
 ・データ整形するプログラム(下記みたいなの)を作って、プラグインフォルダに入れる
 ・プラグイン管理画面から有効化する

<?php
function rsci_meta_filter( $meta, $post, $is_update ) {

$meta_array = array();
$repeater_array = array();

//「導入した研修内容」用の変数・定数
$arr_srctitle = array();
$arr_serialize = array();
$insert_val = "";

//記事IDとタイトルを配列に格納
$arr_posts = array(
100 => '投稿タイトル1',
120 => '投稿タイトル2',
256 => '投稿タイトル3',
320 => '投稿タイトル4',
);

foreach ($meta as $key => $value) {

//テキスト、セレクトボックス(1つ選択)、ラジオボタンなど、値が1つのデータは
//Advanced Custom Fieldのフィールドキーに変換のみ行う
if($key == 'acf_text') {
$meta_array['field_YYYYYYYYYYYYY'] = $value;

//チェックボックス、セレクトボックス(複数選択)など、値が複数のデータは配列にする
} elseif($key == 'acf_checkbox') {
//$valueが空の場合、データに a:1:{i:0;s:0:"";} という空データが入ってしまうので
//空の場合は配列にしない
if ($value != "") {
$meta_array['field_XXXXXXXXXXXXX'] = preg_split("/,+/", $value);
} else {
$meta_array['field_XXXXXXXXXXXXX'] = "";
}

//投稿オブジェクト(複数選択)の場合、記事IDをシリアライズする
} elseif($key == 'acf_postobject') {
if ($value != "") {
$arr_srctitle = preg_split("/,+/", $value);
foreach ($arr_srctitle as $k => $v) {
if ( array_search ( $v , $arr_posts) != FALSE ) {
//DBにはこういうデータを格納したいので→ a:4:{i:0;s:3:"100";i:1;s:3:"120";i:2;s:3:"320";}
//str型にキャストして、記事IDの配列をつくる
$arr_serialize[] = (string)array_search ( $v , $arr_posts);
}
}
//記事IDの配列をシリアライズ
$insert_val = serialize($arr_serialize);
}
$meta_array['field_ZZZZZZZZZZZZZ'] = $insert_val;

//Advanced Custom Field以外のデータはそのまま配列に入れる
} else {
$meta_array[$key] = $value;
}

} //foreach

return $meta_array;

}
add_filter( 'really_simple_csv_importer_save_meta', 'rsci_meta_filter', 10, 3 );

記事IDのところがざっくり過ぎて若干恥ずかしい感じですが。。
こんなことをさせてます。
(1)CSVでアップ時のカラム名を、Advanced Custom Fielsのフィールドキーにする
 フィールドキーは、フィールドグループ編集画面の表示オプションで
 Show Field Keyを「はい」にすると確認できる
(2)チェックボックス(複数選択)の項目は、
 CSVにはカンマ区切りで値を入れておいて、
 上記プログラム内で配列に変換
(3)投稿オブジェクトの項目は、
 CSVにはカンマ区切りで投稿タイトルを入れ、
 プログラム内で該当する投稿の記事IDをシリアライズする
 (記事IDを配列にしただけだとうまくインポートできなかったので、
 DBの値見て同じようにしてます)

●参考サイト
Really Simple CSV Importer 日本語解説&カスタマイズ例 | notnil creation weblog

Really Simple CSV Importerを使ってAdvanced Custom FieldsのRepeater Fieldにデータをインポートする | notnil creation weblog

記事をCSVで一括登録!WordPressプラグインReally Simple CSV Importer | 株式会社LIG

IT関係カテゴリの最新記事