2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Advanced Custom Fieldsのフィールドキーを使ってチェックボックスやラジオボタンの選択肢を取得する方法

Posted at

はじめに

こんにちは、CMA制作部スタッフkrm0095です。

WordPressのAdvanced Custom Fields(ACF)でチェックボックスやラジオボタンを作るとき、get_field('フィールド名')で値を取得することが多いと思います。
しかし「ループ外」で選択肢を取得したい場合は少し不便です。

そんなときはフィールドキーを使って選択肢を取得してあげるととても便利です。
今回はチェックボックスの選択肢を配列として取り出し、チェックリストに使う方法をご紹介します。

fieldkey.png

フィールドキーとは?

ACFでは、各フィールドにユニークなIDが割り振られています(例:field_123456789abcd)。
このキーを使うと、フィールド名に依存せずにフィールド情報を丸ごと取得できます。

また、フィールドキーを使う方法は「投稿が0件の場合」でも選択肢を取得できるのが大きなメリットです。
get_field()は投稿に紐づく値を取得しますが、get_field_object()は「フィールド設定そのもの」を取得する関数のため、投稿が存在しなくても選択肢が取得できます。

PHP
$field = get_field_object('field_123456789abcd');

取得できる情報には以下が含まれます。

  • label:フィールドのラベル
  • name:フィールド名
  • type:フィールドタイプ(text,checkboxなど)
  • choices:チェックボックスやラジオボタンの選択肢
  • default_value:デフォルト値

チェックボックスの選択肢をループ外で配列化

以下の例では、フィールドキーからチェックボックスのラベルをすべて取得し、配列$checklist_arrayに格納しています。

PHP
<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の中身は以下のようになります。

PHP
['赤', '青', '黄']

値(value)だけを取得したい場合

管理画面のラベルではなく、内部で使う値だけを取得したい場合はarray_keys()を使います。

PHP
$value_array = array_keys($choices);

これで ['red', 'blue', 'yellow'] のような配列が作れます。

まとめ

フィールドキーを使えば、ラベル・値・その他設定情報を簡単に取得でき、ループ外でもチェックリストを動的に生成可能になります。
配列を直接書かなくても、ACFで管理している限り常に最新状態を反映できるので、ループ外でフィルター機能を作るときに非常に便利です。
是非参考にしてみてください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?