WordPress
でカスタムフィールドが必要な時、Advanced Custom Fields
というプラグインをよく使っています。
記事中のカスタムフィールドの値を得る方法については、たくさん記事が書かれているので調べるのに苦労はないと思うんですが、セレクトボックスなど選択肢のあるフィールドタイプを用意した時に、その選択肢一覧を取得したいと思ったんですが、ググってみてもいい方法を見つけられませんでした。これ以上調べるの面倒だったので自分で解決したメモ書きです。
Advanced Custom Fields — WordPress プラグイン
Advanced Custom Fields
は、記事にカスタムフィールドを使えるようにするプラグインです。テキストはもちろんセレクトボックスやチェックボックスなど各フィールドタイプに加えてjQuery UI
のDatepicker
なども用意されていてなかなか便利です。また、投稿タイプやカテゴリなどカスタムフィールドを適用する記事のフィルターの設定も簡単です。
各記事のカスタムフィールドの値を参照するには、方法はいくつかあるみたいですが自分はいつもget_post_meta()
を使っています。
// 記事のカスタムフィールド"rating"の値を取得する
$rating = get_post_meta($post->ID, 'rating', true);
関数リファレンス_get post meta - WordPress Codex 日本語版
で、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
を「はい」にすることで表示されるようになります。
初期設定では表示されていないので、最初はわざわざHTMLソースを見てました、恥ずかしい。
ちなみに、うちだけの不具合か分かりませんが、フィールドグループのスラッグは編集できません。勝手にタイトルを元にしたスラッグになってしまうので、面倒を避けるためにタイトルには日本語を使わないようにしてます。
これで無事に選択肢の配列を得ることができました。投稿オブジェクトとかが選択肢になっている場合は試してないですが、とりあえず自分で用意した選択肢についてはこれで十分やっていけそうです。どなたかの参考になれば幸いです。