WordPressのACF(カスタム投稿タイプ)で条件表示をしてみる

ACFで作成したカスタム投稿タイプをカスタムフィールドの値で絞り込んでみました。
例えば今回は、お客様の声のカスタムタイプを作り、性別のフィールドを追加して、その性別で絞り込んでデータを取得してみます。
ACFの使い方自体は以前も触れていますので、そちらも参考にしてみてください。
1. カスタム投稿タイプを作成
まずはお客様の声カスタムタイプを作ります。

2. カスタムフィールドを作成
次に今回の検索条件である性別フィールドを追加してみます。
フィールドタイプは「選択」で、セレクトリスト(ドロップダウンリスト)のことですね。
もし複数の場合はチェックボックスなどをつかうことになると思います。

選択肢の部分ですが、ここでvalueとlabelを一気に指定します。
最初にvalue、半角スペース、半角コロン、半角スペース、表示ラベル、となるみたいですね。
こんな感じです。
「male : 男性」
保存したら、先程作ったカスタム投稿と今つくったカスタムフィールドを紐づけます。

これで先程作ったカスタム投稿の項目に性別が出てくるようになりました。

では適当に記事を作って保存しておきます。
3. データを取得する
実際に公開ページにてデータを取得してみます。
コードはこんな感じです。
// データを取得
wp_reset_postdata();
$voices = get_posts( array(
'post_type' => 'voice',
'meta_key' => 'gender',
'meta_value' => 'male'
));
// データを表示
foreach ( $voices as $voice ) {
setup_postdata( $voice );
echo $voice->post_title;
}
「post_type」でカスタム投稿のslugを指定します。
「meta_key」と「meta_value」でカスタムフィールドの条件を指定します。今回であれば追加した選択肢を指定することになります。
具体的には、「meta_key」に「gender」を、
「meta_value」に「male」を指定することになるようですね。
実際にやってみたら表示されました!
ちなみにチェックボックスの場合はこんな感じにするらしいです。
wp_reset_postdata();
$voices = get_posts( array(
'post_type' => 'voice',
'meta_key' => 'spot',
'meta_value' => 'spot1',
'meta_compare' => 'LIKE'
));
「’meta_compare’ => ‘LIKE’」が追加されています。これは値が複数ある場合に使うらしいのですが、たしかにチェックボックスは複数指定される可能性がありますね。
なるほど、なかなか難しいですね。
4. カスタムフィールドのデータを取得する
カスタムフィールドに追加したデータを表示する場合はちょっと特別なタグを使うみたいです。
こんな感じです。
「get_field」にさっき指定した「フィールド名」である「gender」を指定します。
echo get_field('gender');
またもうひとつ落とし穴がありました。
この「get_field」の指定は「WP_Query」で取得した場合に限定されるみたいです。
「get_posts」で使う場合はIDを指定する必要があるみたいです。
今回であればこんな感じです。
echo get_field('gender', $voice->ID);
うーん、なかなか奥が深いですね。
今回は以上です!