Advanced Custom Fields PRO 繰り返しフィールドの個数取得
繰り返しフィールドの個数を取得
Advanced Custom Fields PRO 利用時に、繰り返しフィールドの個数をループ処理の前に取得しておきたい場合があります。
繰り返しフィールド名をloop_1とした場合に以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
if(have_rows('loop_1')){ $loop1Count = count(get_field('loop_1')); while(have_rows('loop_1')){ the_row(); // 各種処理 } } |
繰り返しフィールドが入れ子の場合
繰り返しフィールド入れ子になっている場合に、単純に以下のように同じ処理構造で実行すると、思いもよらない動作結果となります。
下層の繰り返しフィールドをloop_2とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
if(have_rows('loop_1')){ $loopCount1 = count(get_field('loop_1')); while(have_rows('loop_1')){ the_row(); // 下位階層の繰り返しフィールド if(have_rows('loop_2')){ $loopCount2 = count(get_sub_field('loop_2')); // loop_1の要素なのでget_sub_fieldを使用 // ここで $loopCount2 は false が取得されます while(have_rows('loop_2')){ the_row(); // 各種処理 } } } } |
繰り返しフィールドが入れ子の場合の正しい結果を得るための処理
下層の繰り返しフィールドに対する処理が開始される前に個数を取得しておけば正しい結果が得られます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
if(have_rows('loop_1')){ $loopCount1 = count(get_field('loop_1')); while(have_rows('loop_1')){ the_row(); // have_rows('loop_2') 実行前に個数を取得 $loopCount2 = count(get_sub_field('loop_2')); // loop_1の要素なのでget_sub_fieldを使用 // 下位階層の繰り返しフィールド if(have_rows('loop_2')){ // ここで $loopCount2 は正しい個数が得られる while(have_rows('loop_2')){ the_row(); // 各種処理 } } } } |
foreach()構文を使用
while(have_rows(‘loop_2’))構文ではなくforeach()構文を使用する場合はこの限りではありません。
Advanced Custom Fields PRO の多重繰り返しフィールドにおける構文
(※ 当ページは社内技術資料としての位置付けですので読みにくいこともあるかもしれませんが、一般の方の課題解決に役立てれば幸いです。)
弊社サイトご案内
弊社ではデザイン会社様やウェブサイト制作会社様との提携・協業を随時お願いしております。