最近よくお世話になっているAdvanced Custom Fieldsの有料アドオン「Repeater Field」。ひな形を作ることで、そのひな形を繰り返し使えるカスタムフィールドで、何度も追加できるので、例えば企業サイトでよくあるご質問などを設置するとき、「質問」と「回答」のひな形を繰り返し追加していくことが出来ます。
他にも投稿内のレイアウトを自由にコントロールできる「Flexible Content Field」はオススメです(ちなみにこちらも有料アドオンです)
さて、それで最近あった事例なんですが、この「Repeater Field」は、
<?php while(has_sub_field('フィールド名')): ?>
と書くんですけど、
今回、このフィールド内にさらにセレクトでカテゴリを作って、カテゴリごとにカスタムフィールドを表示させていたんですけど、それぞれをカテゴリがなかったら「カテゴリ名(タイトル)」を非表示にしたいとの要望がありました。
ただ問題なのが、この「Repeater Field」はただ繰り返し出力(while)することしかできず、「Repeater Field」内のカテゴリを細かく判別することまでできません。
唯一の方法として、
<?php $cate = get_sub_field('カテゴリのフィールド'); if($cate == 'カテゴリ名'): ?> // 繰り返し内容 <?php endif; ?>
っていう風に必要なカテゴリのみを表示させるしかない。
ただこれだとカテゴリ名を判別して、そのカテゴリ名を一回しか表示させないことなんてできない。
Repeater Fieldはwhile内にしか書けないから(笑)
なので、あまりいい方法ではないのは重々承知の上だが、「カテゴリ名」と「中のフィールド」を別々のwhileで表示させることにした。
で、本題。
カテゴリ名は一回しか表示させる必要がないから強制的にwhileを1回しか行わない方法を書いてみました。
<?php $x = 1; while(has_sub_field('フィールド名')): ?> <?php $cate = get_sub_field('カテゴリのフィールド'); if($cate == 'カテゴリ名'): ?> <?php if($x == 1) { echo '<p>カテゴリ名</p>'; } ?> <?php $x++; ?> <?php endif; ?> <?php endwhile; ?>
whileは繰り返しに使うもので、それを強制的に1回しか繰り返さないなんて、まったく意味不明なんですけど、もしwhileを1回で終わらせたい場合はお試しください。