WordPress

Advanced Custom Fields プラグインのカスタムフィールドの選択肢を取得する

WordPressでカスタムフィールドが必要な時、Advanced Custom Fieldsというプラグインをよく使っています。

記事中のカスタムフィールドの値を得る方法については、たくさん記事が書かれているので調べるのに苦労はないと思うんですが、セレクトボックスなど選択肢のあるフィールドタイプを用意した時に、その選択肢一覧を取得したいと思ったんですが、ググってみてもいい方法を見つけられませんでした。これ以上調べるの面倒だったので自分で解決したメモ書きです。

Advanced Custom Fields — WordPress プラグイン

Advanced Custom Fieldsは、記事にカスタムフィールドを使えるようにするプラグインです。テキストはもちろんセレクトボックスやチェックボックスなど各フィールドタイプに加えてjQuery UIDatepickerなども用意されていてなかなか便利です。また、投稿タイプやカテゴリなどカスタムフィールドを適用する記事のフィルターの設定も簡単です。

WordPress Plugin 'Advanced Custom Fields' フィールドグループ編集画面
フィールドグループ編集画面

各記事のカスタムフィールドの値を参照するには、方法はいくつかあるみたいですが自分はいつもget_post_meta()を使っています。

// 記事のカスタムフィールド"rating"の値を取得する
$rating = get_post_meta($post->ID, 'rating', true);

関数リファレンス_get post meta - WordPress Codex 日本語版

で、Advanced Custom Fieldsで、セレクトボックスやチェックボックスなど選択肢のあるカスタムフィールドを設けた場合に、選択肢に合わせて記事をソートしたりしたかったので、その選択肢一覧を取得したいなと思ったわけであります。

WordPress Plugin 'Advanced Custom Fields' フィールドグループの選択肢

Advanced Custom Fieldsもカスタム投稿なので、まずget_posts()で該当するフィールドグループを取得して、選択肢のあるカスタムフィールドの内容を得るようにしました。

// フィールドグループの記事オブジェクトを取得
$acf_post = array_shift(
  get_posts( array(
    'posts_per_page' => 1,                  // 取得する数
    'post_type'      => 'acf',              // 記事のタイプ
    'name'           => 'acf_customfield1', // フィールドグループのスラッグ
  ) )
);

// 選択肢を取得したいフィールドのキー(自動生成)
$field_key = 'field_5948b5b5e36de';

// 選択肢を取得したいフィールドの配列を取得
$acf_post_rating = get_post_meta($acf_post->ID, $field_key, true);

// 選択肢の配列を取得
$acf_post_rating_choices = $acf_post_rating['choices'];

// 選択肢の配列を出力
echo "カスタムフィールド「評価」の選択肢<br>";
foreach( $acf_post_rating_choices as $value => $label ){
  echo "{$value} : {$label}<br>";
}
結果
> カスタムフィールド「評価」の選択肢<br>
> 1 : とても悪い<br>
> 2 : 悪い<br>
> 3 : 普通<br>
> 4 : 良い<br>
> 5 : スゲー良い<br>

自動生成されるカスタムフィールドのキーは、上の表示オプションのタブにあるShow Field Keyを「はい」にすることで表示されるようになります。

WordPress Plugin 'Advanced Custom Fields' フィールドグループ

初期設定では表示されていないので、最初はわざわざHTMLソースを見てました、恥ずかしい。

WordPress Plugin 'Advanced Custom Fields' フィールドグループ

ちなみに、うちだけの不具合か分かりませんが、フィールドグループのスラッグは編集できません。勝手にタイトルを元にしたスラッグになってしまうので、面倒を避けるためにタイトルには日本語を使わないようにしてます。

WordPress Plugin 'Advanced Custom Fields' フィールドグループのスラッグ編集

これで無事に選択肢の配列を得ることができました。投稿オブジェクトとかが選択肢になっている場合は試してないですが、とりあえず自分で用意した選択肢についてはこれで十分やっていけそうです。どなたかの参考になれば幸いです。