サイトアイコン 演劇とかの感想文ブログ

Really Simple CSV Importerで、カンマ付きの項目を取り込む

Really Simple CSV Importerを利用する際に、取り込み項目の中に”,”を含める場合の対応方法を記載します。

Really Simple CSV Importerの、フィルターフックを利用して取り込み時に別の記号で作成したデータを、,(カンマ)に置き換える処理を記載することで実現します

目次

CSVデータの中に”,”を利用する必要が発生!

演劇感想文リンクをWORDPRESS化するにあたり、コンテンツデータの取り込みには、Really Simple CSV Importerを利用します。

通常のコンテンツを取り込むには問題ないのですが、先日記事にしたように、演劇公演データを構造化データとして一緒に取り込もうとすると、困ったことに気づきました。

構造化データ(JSON LD形式)の場合、”,”が多用されており、CSVデータとして取り込むと区切りのカンマとして認識されてしまってデータが、分断されてしまい上手く取り込む事ができないのです。

“”で囲めば良いと思ったのですが、構造化データの中にも””が多用されており、””で囲むだけではうまくいきません。(例えば、タグ(post_tag)などであれば、””で囲むことで、中に”,”があっても上手く取り込むことができます)

フィルターフックを利用して、保存前に,に置き換える

Really Simple CSV Importerには、フィルターフックと言うかたちで、データの取り込み時のいくつかのタイミングで、データに処理を加えることができるようです。公式のページの説明では、イマイチわからなかった(単に理解力の問題ですorz)のですが、とても参考になる記事を見つけました。 「WordPressのReally Simple CSV Importerを使って固定ページをインポートする方法– ウェブタタン」 こちらのページに、まさに取り込み項目について、”,”を含める方法が記載されています。こちらに記載されているコードを参考に以下のようにコードをfunction.phpの末尾に追記しました。

/**For Really Simple CSV Importer **/
function really_simple_csv_importer_save_meta_filter( $meta, $post, $is_update ) {

  if (isset($meta['post_content'])) {
    $meta['post_content'] = str_replace('●', ',', $meta['post_content']);
  }
  return $meta;
}
add_filter( 'really_simple_csv_importer_save_post', 'really_simple_csv_importer_save_meta_filter', 10, 3 );

元のコードからは、以下の3点を変更しました。

  1. 対象となる項目を’custom_item’から’post_content’へ。(今回の変換を加えたいところは、記事内容そのものなので)(4,5行目)
  2. フィルターの適用タイミングを「really_simple_csv_importer_save_meta(カスタムフィールド保存前)」から「really_simple_csv_importer_save_post(投稿保存前)」へ。(9行目)
  3. 変換元の記号を”-“から”●”へ。

1,2は、カスタム項目ではなく、元々ある項目(この場合、記事内容にあたるpost_content)にする場合に必要な設定です。

フィルター適用タイミングは、以下の4つがあるようです。

データを作成し、取り込んで見る。

以下のようなテストデータを作成して、取り込んでみます。

 

"post_id","post_name","post_author","post_date","post_type","post_status","post_title","post_category","post_content"
"","2nkproject1","演劇感想文リンク","2005/10/20 0:00","post","publish","じゃじゃ馬馴らし","公演","テスト●テスト●テスト"

まずは、上記のコードをfunction.phpに書き込む前に取り込みます。WORDPRESSの「スパナ」のマーク>インポート>CSV インポーターの実行を選び、ファイルととして上記のファイルを取り込みます。
取り込まれたイメージは以下のような感じです。

データ中の●は、●のまま取り込まれています。(当たり前ですが)
以下は、コードをfunction.phpに記述した後に、取り込んだ結果です。

 

●の部分が,に変わっています。とりあえず、無事想定通りに動いたようです。

エラー(Warning)が、出るのが気になる。

実は取り込むと以下のような警告メッセージがでます。
Warning: Missing argument 3 for really_simple_csv_importer_save_meta_filter() in /home/makedorama/kansolink.com/public_html/en/wp-content/themes/stinger8/functions.php on line 525
警告メッセージなので、致命的ではないと思うのですが、ちょっと気持ちわるいです。おいおい調べていこうと思います。

モバイルバージョンを終了