はじめに
こんにちは、CMA制作部スタッフkrm0095です。
WordPressのAdvanced Custom Fields(ACF)でチェックボックスやラジオボタンを作るとき、get_field('フィールド名')で値を取得することが多いと思います。
しかし「ループ外」で選択肢を取得したい場合は少し不便です。
そんなときはフィールドキーを使って選択肢を取得してあげるととても便利です。
今回はチェックボックスの選択肢を配列として取り出し、チェックリストに使う方法をご紹介します。
フィールドキーとは?
ACFでは、各フィールドにユニークなIDが割り振られています(例:field_123456789abcd)。
このキーを使うと、フィールド名に依存せずにフィールド情報を丸ごと取得できます。
また、フィールドキーを使う方法は「投稿が0件の場合」でも選択肢を取得できるのが大きなメリットです。
get_field()は投稿に紐づく値を取得しますが、get_field_object()は「フィールド設定そのもの」を取得する関数のため、投稿が存在しなくても選択肢が取得できます。
$field = get_field_object('field_123456789abcd');
取得できる情報には以下が含まれます。
- label:フィールドのラベル
- name:フィールド名
- type:フィールドタイプ(text,checkboxなど)
- choices:チェックボックスやラジオボタンの選択肢
- default_value:デフォルト値
チェックボックスの選択肢をループ外で配列化
以下の例では、フィールドキーからチェックボックスのラベルをすべて取得し、配列$checklist_arrayに格納しています。
<div class="c-filter__block">
<?php
// ACF フィールドキーからフィールド情報を取得
$field = get_field_object('field_123456789abcd');
$choices = $field['choices'] ?? [];
// ラベルだけを配列に
$checklist_array = array_values($choices);
// チェックリスト表示
html_checklist('カラー', 'color', $checklist_array);
?>
</div>
この$checklist_arrayの中身は以下のようになります。
['赤', '青', '黄']
値(value)だけを取得したい場合
管理画面のラベルではなく、内部で使う値だけを取得したい場合はarray_keys()を使います。
$value_array = array_keys($choices);
これで ['red', 'blue', 'yellow'] のような配列が作れます。
まとめ
フィールドキーを使えば、ラベル・値・その他設定情報を簡単に取得でき、ループ外でもチェックリストを動的に生成可能になります。
配列を直接書かなくても、ACFで管理している限り常に最新状態を反映できるので、ループ外でフィルター機能を作るときに非常に便利です。
是非参考にしてみてください。
