Blog

Really Simple CSV Importer 日本語解説&カスタマイズ例

Posted by admin at 20:49 日時 2014/12/16

#

WordPressのプラグイン、Really Simple CSV Importer のバージョン1.0をリリースしました。ということで、今さらですが、プラグイン説明欄の日本語訳を載せておきます。ネット上には、何やら怪しげな解説記事がちらほら出回っているようですので…。

バージョン1.0では、アクションフックを追加し、便利なヘルパークラスも新作しました。当初考えていた機能はこれで出そろいましたので、あとはメンテナンスやら多言語対応やらをのんびりやっていこうかと思います。次に作成するWordPressプラグインとしては、concrete5のインポートファイル形式へのエクスポートプラグインを予定しています。

なお、Really Simple CSV Importerには、torounitさん作のReally Simple CSV Importer Media Plusという派生プラグインが存在しており、こちらを使っている方も多いと思います。Media Plusの方は、カスタムフィールドの値が画像だったら自動でメディアにアップしてIDに置換すると言うものですが、URLのままカスタムフィールドに入れておきたい場合もあると思いますので、当プラグインには該当機能をマージしていませんでした。アクションフックの追加によって、同様のことが可能になりました。下の方でその例を解説しています。

プラグイン説明欄の日本語訳

CSVインポータープラグインのもうひとつの選択肢。シンプルで強力、ギークに最適。

  • カテゴリーをサポート
  • タグをサポート
  • カスタムフィールドをサポート
  • Custom Field Suite をサポート
  • Advanced Custom Fields をサポート
  • カスタムタクソノミーをサポート
  • カスタム投稿タイプをサポート
  • 空実行のためのフィルターフック
  • データベースにインポートする前にCSVデータをカスタマイズするフィルターフック
  • データベースにインポートした後に投稿データを更新するアクションフック

CSVファイルのサンプルを /wp-content/plugins/really-simple-csv-importer/sampleディレクトリから入手できます。

利用可能なカラム名と値:

  • ID or post_id: (数値) 投稿ID。
    既存の記事を更新したい場合に使います。投稿IDがあなたのブログに存在している場合は、インポーターは投稿データを更新します。存在していない場合は、新しいポストを指定された投稿IDで作成します。
  • post_author: (ログイン名 または ID) 投稿者のユーザー名またはユーザーID数値。
  • post_date: (文字列) 公開日の時間指定。
  • post_content: (文字列) 投稿の本文。
  • post_title: (文字列) 投稿のタイトル。
  • post_excerpt: (文字列) 投稿の抜粋。
  • post_status: (‘draft’ または ‘publish’または ‘pending’または ‘future’または ‘private’またはカスタムステータス) 投稿ステータス。’draft’がデフォルトです。Codexの投稿ステータスページ
  • post_name: (文字列) 投稿のスラッグ。
  • post_parent: (数値) 投稿の親ID。階層構造を持つ投稿タイプの場合に使います。
  • menu_order: (数値) 並び順。
  • post_type: (‘post’ or ‘page’ or any other post type name) (必須) 投稿タイプスラッグ。ラベルではありません。
  • post_thumbnail: (文字列) 投稿サムネイル(アイキャッチ画像)のURI、またはパス。
    http://example.com/example.jpg
  • post_category: (文字列、カンマ区切り) 投稿カテゴリーをスラッグで指定
  • post_tags: (文字列、カンマ区切り) 投稿タグを名前で指定
  • tax_{taxonomy}: (文字列、カンマ区切り) 接頭辞 tax_ で始まるフィールドは、カスタムタクソノミーとして使われます。タクソノミーはすでに登録済みである必要があります。入力値はタームの名前、またはスラッグです。
  • {custom_field_key}: (文字列) その他のカラムのラベルはすべてカスタムフィールドとして扱われます。
  • cfs_{field_name}: (文字列) Custom Field Suiteプラグインで設定されたカスタムフィールドにインポートしたい場合は、接頭辞 cfs_ を追加してください。

注意:CSVファイル内のセルは「値の維持」を意味し、「削除」ではありません。
注意:ページのページテンプレートを指定したい場合は、カスタムフィールドのキーで _wp_page_template を指定してください。
注意:投稿ステータスで ‘future’(予約済み)を指定する場合は、post_data を指定することでWordPressにいつ投稿を公開すべきかを指示する必要があります。

Advanced Custom Fields プラグイン連携

Advanced Custom Fieldプラグインのキーが存在する場合は、インポーターは標準の add_post_meta 関数ではなく、update_field 関数を使ってインポートを試みます。
Advanced Custom Fieldキーの取得方法

公式公開リポジトリ

スターをよろしく! GitHub

謝辞

カバーバナーデザイン: @luchino__

カスタマイズ例

Advanced Custom FieldsのGoogle Mapフィールドにインポート

Really Simple CSV Importerに組み込まれているフィルターフックを使うことで、配列データをカスタムフィールドに登録できます。フィルターフックを使うには、Really Simple CSV Importerをカスタマイズするための別のプラグインを作成します。以下は、そんなプラグインの作例です。

このプラグインを有効にすると、下記のようなCSVファイルをインポートする際、フィルターフックからのカスタマイズ無しには、lat と lng はそれぞれ同名のカスタムフィールドに別々に格納されますが、フィルターフックによるデータ加工により、コード中で指定された field_54899effa7dbe というAdvaced Custom FieldのGoogle Mapフィールドに配列で保存されます。

URLを指定して画像をインポートし、IDをカスタムフィールドに保存する

Really Simple CSV Importerに組み込まれているアクションフックを使うと、インポートした直後に投稿データを操作することができます。下記の作例では、インポート時にはいったん画像のURLをカスタムフィールドに保存しています。

このCSVをそのままインポートすると、image というカスタムフィールドに画像のURLが保存されます。アクションフックを使って、カスタムフィールドに保存されている画像のURLを読み込み、インターネットから取得してメディアにアップロードし、アップロードしたファイルを投稿に添付し、カスタムフィールドに保存されているURLを添付ファイルIDに変換、という処理を行なっています。

ヘルパークラスの使用例

Really Simple CSV Importerプラグインに同梱されている RSCSV_Import_Post_Helper クラスは、単独でも便利に使っていただけると思います。

新しい投稿の追加

<?php  // 必要ファイルのインクルード  require_once ABSPATH . 'wp-content/plugins/really-simple-csv-importer/class-rscsv_import_post_helper.php';    // 投稿データの設定  $data = array(      'post_title' => '投稿タイトル',      'post_content' => '本文',      'post_type' => 'post',      'post_status' => 'publish'  );    // データベースに追加  $h = RSCSV_Import_Post_Helper::add($data);    // エラーの確認  if ($h->isError()) {      // エラーメッセージの表示      echo implode(' ', $h->getError()->get_error_messages());  } else {      // カスタムフィールドの追加      $meta = array(          'custom_field_key' => 'Custom Field Value'      );      $h->setMeta($meta);            // タグの追加      $tags = 'Hello, World';      $h->setPostTags($tags);            // タクソノミーを指定してタームの追加      $terms = array( 'Lorem', 'Ipsum');      $h->setObjectTerms( 'category', $terms );            // アイキャッチ画像をアップロード      $image_uri = 'http://example.com/example.png';      $h->addThumbnail( $image_uri );            echo 'インポート完了。';  }

既存の投稿の編集

<?php  // 必要ファイルのインクルード  require_once ABSPATH . 'wp-content/plugins/really-simple-csv-importer/class-rscsv_import_post_helper.php';    // 投稿データの設定  $data = array(      'post_title' => '投稿タイトル更新',      'post_content' => '本文更新',      'post_type' => 'post',      'post_status' => 'draft'  );    // 投稿IDを指定して内容を更新  $h = RSCSV_Import_Post_Helper::getByID(123);  $h->update($data);    // エラーの確認  if ($h->isError()) {      // エラーメッセージの表示      echo implode(' ', $h->getError()->get_error_messages());  } else {      // 以下投稿の追加時と同じ            $meta = array(          'custom_field_key' => 'Custom Field Value'      );      $h->setMeta($meta);            $tags = 'Hello, World';      $h->setPostTags($tags);            $terms = array( 'Lorem', 'Ipsum');      $h->setObjectTerms( 'category', $terms );            $image_uri = 'http://example.com/example.png';      $h->addThumbnail( $image_uri );            echo '更新完了。';  }

Share this entry