Web制作

Custom Post Type UIで作ったタグをSmart Custom Fieldsで表示させて、Really Simple CSV Importerで複数のタグをインポートする方法

前段

とある案件で、FAQを100件ほど登録・表示させる機能がほしいというお話を頂いたので、いろいろ調査しました。
WordPressを使用して公開済みのサイトです。

条件

  • FAQページを作る(検索機能付き)/li>
  • FAQは管理画面でメンテ可
  • 100件ほどあるので、インポートしたい(個人的に)

使用プラグイン

  • Custom Post Type UI (以下CPT)
  • Smart Custom Fields (以下SCF)
  • Really Simple CSV Importer ←これは今回追加

作業の流れ

CPTでカスタム投稿タイプ「FAQ」を作成

プラグインは既にインストールされていたので投稿タイプ作成。

なぜかCPTのUIが英語に。。。Docker環境なので気にしない。
CPTでタグ(taxonomy)を作成

まずはCPTでタグの箱を作成。

その後、CPTで作成した投稿タイプメニュー(左側)のサブメニュー内に編集画面が出てくる。

仮で3つほど作成。
SCFで「FAQ」用のフィールドを作る

※()内はフィールド名(英語)

  • Q(question)
  • A(answer)
  • タグ(tag)
一部抜粋ですがこんなかんじ。
テスト投稿したデータをCSVエクスポートできるか調べた

エクスポートしたCSVのフォーマットでインポートしたらいいと思いましたが、
そんなプラグインは見つかりませんでした。知ってる方いたら教えて下さい。

インポートフォーマットを調べる。

インポートは Really Simple CSV Importer をインストールすると、左メニュー>ツール>インポート に

CSVインポートの機能が出てくる。

ここでUTF-8のCSVをアップロードすれば良い。


Really Simple CSV Importer制作者であるTAKURO HISHIKAWA様のサイト記事に、
「カスタムフィールドの名前の先頭に接頭辞として scf_ を付けてください。」とあったので素直に従ったところ、
QとAは入ったがタグが入らない。。。
・日本語で入れてみる →NG
・スラッグで入れてみる →NG
・IDで1つ入れてみる →OK
・IDで複数カンマ区切りで入れてみる →1つしか入らない

インポートフォーマットはあっているみたい。

インポート用CSVを一部抜粋。
本題 独自のタグをインポートする。

前置きが長くなりましたが本題です。
Qiitaにある下記記事の内容そのままでした。
投稿者さんありがとうございます。


当該記事ではチェックボックスでしたが、カスタム方針は全く同じでした。

function.phpに下記を追加。

 function really_simple_csv_importer_meta_filter_tag( $meta, $post, $is_update ) {
 foreach ($meta as $key => $value) {
 if (strpos($value, ',') !== false) {
 $_value = preg_split("/,+/", $value);
 $meta[$key] = $_value;
 }
 }
 return $meta;
 }
 add_filter( 'really_simple_csv_importer_save_meta','really_simple_csv_importer_meta_filter_tag', 5, 3 );

これでタグのIDをカンマ区切りで入れてみると、無事インポートできました。

元データはExcelでいただけるようなので、あとは数式でゴニョゴニョすればOKと思われる。