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.php
に CSVデータを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');
コードの仕組み
- ACFのフィールド名を取得(例:
category
) settings/acf/choices/category.csv
を探す- CSVデータを読み込む
- 選択肢としてACFに適用
これにより、CSVを編集するだけでACFの選択肢を更新 できます。
ACFフィールドの設定
WordPressの管理画面で、各フィールドの「フィールド名」を CSVのファイル名と一致させる 必要があります。
フィールド名 | CSVファイル |
---|---|
category | category.csv |
product_type | product_type.csv |
location | location.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を更新するだけで選択肢を一括変更可能
コメント