こんにちは、Ryohei(@ityryohei)です!

本記事では、WordPressのACF(Advanced Custom Fields)でフィールドグループに定義した全てのフィールドを取得して表示する方法をご紹介しています。

基本的にACFで定義したカスタムフィールドは投稿毎に使用することが一般的ですが、下記のような場合にフィールドグループに定義した全てのフィールドを取得して表示したい場合があります。

  • カスタムフィールドに定義した内容を全て取得して表示したい
  • カスタムフィールドを使用して独自の検索ページしたい

フィールドグループに定義したフィールドを全て取得して表示したいんだけど、良い方法ないかな?

上記の疑問にお答えしています。

では、解説していきます。

ACFの公式ドキュメントを活用しよう!

WordPressのプラグイン、特に有名で幅広いサイト使用されている場合は公式のドキュメントが充実していることが多いです。ACF(Advanced Custom Fields)は昔からある有名なプラグインで、カスタムフィールを作成する場合はほとんどがこのプラグインに頼られています。(もちろん自作する方もいらっしゃいます。)

ACF(Advanced Custom Fields)のドキュメントは下記のページにあります。全て英語になりますが、使い方や使用例が丁寧に解説されています。

https://www.advancedcustomfields.com/resources/

上記のドキュメントやサポートの内容を参考に本記事で実現したい内容を実装していきます。

IDを指定してフィールドグループの全てのフィールドを取得する

ACF(Advanced Custom Fields)では、フィールドグループを作成すると一意ののID(整数)が付与されます。そのIDから全てのフィールドを取得することができます。IDの確認方法は簡単で、WordPressの管理画面から取得したいフィールドグループを開くとURLに表示されています。

使用する関数は下記お通りです。

acf_get_fields($id);

実行すると下記のようにフィールドグループに属する全てのフィールドを取得することができます。
(下記はサンプル用に作成したラジオタイプのカスタムフィールドです。)

[0]=>
  array(24) {
    ["ID"]=>
    int(64)
    ["key"]=>
    string(19) "field_5e83f603dd759"
    ["label"]=>
    string(27) "都道府県"
    ["name"]=>
    string(8) "area"
    ["prefix"]=>
    string(3) "acf"
    ["type"]=>
    string(5) "radio"
    ["value"]=>
    NULL
    ["menu_order"]=>
    int(1)
    ["instructions"]=>
    string(0) ""
    ["required"]=>
    int(1)
    ["id"]=>
    string(0) ""
    ["class"]=>
    string(0) ""
    ["conditional_logic"]=>
    int(0)
    ["parent"]=>
    int(62)
    ["wrapper"]=>
    array(3) {
      ["width"]=>
      string(0) ""
      ["class"]=>
      string(0) ""
      ["id"]=>
      string(0) ""
    }
    ["choices"]=>
    array(2) {
      ["area01"]=>
      string(9) "東京都"
      ["area02"]=>
      string(9) "大阪府"
      ["area03"]=>
      string(9) "愛知県"
      ["area04"]=>
      string(9) "神奈川県"
      ["area05"]=>
      string(9) "福岡県"
    }
    ["allow_null"]=>
    int(0)
    ["other_choice"]=>
    int(0)
    ["default_value"]=>
    string(0) ""
    ["layout"]=>
    string(10) "horizontal"
    ["return_format"]=>
    string(5) "array"
    ["save_other_choice"]=>
    int(0)
    ["_name"]=>
    string(8) "area"
    ["_valid"]=>
    int(1)
  }

実際に取得する情報は上記が複数連なっている配列となります。(ここでは長くなってしまうので省略しています。)

では実際にフィールドグループに定義した全てのフィールドを取得してみましょう。

フィールドグループに定義した全てのフィールドを取得して表示する

下記がフィールドグループに定義した全てのフィールを取得して表示するサンプルです。下記の例では、ラジオボタンやチェックボックスを表示しています。(キーと値が登録されている必要があります。)他のカスタムフィールドタイプについては、下記を参考に変更していただければと思います。

 <?php
$group_id = '100';
$fields = acf_get_fields($group_id);
echo '<form>';
foreach ($fields as $field => $data){
    echo '<p>'.$data['label'].'</p>';
    echo '<select>';
    foreach ($data['choices'] as $key => $value ){
        echo '<option value="'.$value.'">'.$key.'</option>';
    }
    echo '</select>';
}
echo '</form>';
?>

最後に

ACF(Advanced Custom Fields)はWordPressでカスタムフィールドを作る際にとても便利なプラグインです。基本的に投稿毎に使用するものですが、本記事のようにフィールドグループに定義した全てのフィールドを取得して表示することも可能です。ACF(Advanced Custom Fields)でゴリゴリカスタマイズされる場合に本記事でご紹介した内容をぜひ使用してみてくださいね!

以上、WordPressのACF(Advanced Custom Fields)でフィールドグループに定義した全てのフィールドを取得して表示する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。