WordPress | ACFの選択肢をCSVで管理する方法【シンプルな1列フォーマット】

WordPress の Advanced Custom Fields(ACF) を利用すると、カスタムフィールドに セレクトボックスやラジオボタンの選択肢を追加 できます。しかし、管理画面で手入力するのは手間がかかります。

本記事では、選択肢を1列のCSVで管理し、自動でACFのフィールドに適用する方法 を解説します。


なぜCSVで管理するのか?

通常、ACFの選択肢は管理画面で直接入力する必要があります。しかし、大量のデータを登録する場合、以下のような問題が発生します。

  • 手作業での更新が面倒
  • 選択肢が多いと管理しづらい
  • バージョン管理ができない

CSVで管理すれば、以下のメリットがあります。

  • エクセルやGoogleスプレッドシートで編集可能
  • 選択肢をファイルで管理できるため、一括更新が可能
  • Gitなどで履歴を管理しやすい

CSVファイルの作成と保存場所

まず、CSVファイルを settings/acf/choices/ ディレクトリ内に保存します。

フォルダ構成は以下のようになります。

settings/acf/choices/
├── category.csv
├── product_type.csv
├── location.csv

CSVの記述ルール

各CSVファイルには、1行に1つの選択肢を記述します。

例: category.csv

Electronics
Furniture
Clothing
Sports
Books

例: product_type.csv

Smartphone
Laptop
Tablet
Camera
Headphones

例: location.csv

Tokyo
Osaka
Nagoya
Fukuoka
Sapporo

このフォーマットでは、CSVの値をそのままACFの選択肢として利用 します。
つまり、値(value)とラベル(label)が同じ になります。


CSVデータをACFに適用するコード

次に、WordPressの functions.phpCSVデータをACFに適用するコード を追加します。

function my_acf_load_choices_from_csv($field) {
    // CSVフォルダのパス(フィールド名とCSVファイル名を一致させる)
    $csv_dir = get_template_directory() . '/settings/acf/choices/';
    $csv_file = $csv_dir . $field['name'] . '.csv';

    if (file_exists($csv_file)) {
        $csv = array_map('str_getcsv', file($csv_file));
        $choices = [];

        foreach ($csv as $row) {
            if (!empty($row[0])) {
                $choices[$row[0]] = $row[0]; // 値とラベルを同じにする
            }
        }

        $field['choices'] = $choices;
    }

    return $field;
}

// ACFのすべてのフィールドに適用
add_filter('acf/load_field', 'my_acf_load_choices_from_csv');

コードの仕組み

  1. ACFのフィールド名を取得(例: category
  2. settings/acf/choices/category.csv を探す
  3. CSVデータを読み込む
  4. 選択肢としてACFに適用

これにより、CSVを編集するだけでACFの選択肢を更新 できます。


ACFフィールドの設定

WordPressの管理画面で、各フィールドの「フィールド名」を CSVのファイル名と一致させる 必要があります。

フィールド名CSVファイル
categorycategory.csv
product_typeproduct_type.csv
locationlocation.csv

フィールドタイプは以下のいずれかを選択してください。

  • セレクトボックス
  • ラジオボタン
  • チェックボックス

CSVが存在しない場合の処理

もし、対応するCSVが存在しない場合にエラーにならないよう、デフォルトの選択肢を設定することも可能です。

function my_acf_load_choices_with_default($field) {
    $csv_dir = get_template_directory() . '/settings/acf/choices/';
    $csv_file = $csv_dir . $field['name'] . '.csv';

    $choices = [];

    if (file_exists($csv_file)) {
        $csv = array_map('str_getcsv', file($csv_file));

        foreach ($csv as $row) {
            if (!empty($row[0])) {
                $choices[$row[0]] = $row[0];
            }
        }
    } else {
        // CSVがない場合のデフォルト値
        $choices = ['default' => '選択肢がありません'];
    }

    $field['choices'] = $choices;
    return $field;
}
add_filter('acf/load_field', 'my_acf_load_choices_with_default');

まとめ

ACFの選択肢を CSVで管理すると、データの編集・更新が格段に楽 になります。

  • 1列のみのシンプルなCSVで管理
  • 選択肢をファイル単位で整理できる
  • ACFのフィールド名とCSVファイル名を一致させる
  • CSVを更新するだけで選択肢を一括変更可能

コメント

タイトルとURLをコピーしました