Advanced Custom Fields PRO 繰り返しフィールドの個数取得

WordPress Tips

繰り返しフィールドの個数を取得

Advanced Custom Fields PRO 利用時に、繰り返しフィールドの個数をループ処理の前に取得しておきたい場合があります。
繰り返しフィールド名をloop_1とした場合に以下のようになります。


	if(have_rows('loop_1')){

		$loop1Count = count(get_field('loop_1'));

		while(have_rows('loop_1')){
			the_row();

            // 各種処理

        }

    }

繰り返しフィールドが入れ子の場合

繰り返しフィールド入れ子になっている場合に、単純に以下のように同じ処理構造で実行すると、思いもよらない動作結果となります。
下層の繰り返しフィールドをloop_2とします。


	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();

                    // 各種処理

                }
            }
        }
    }

繰り返しフィールドが入れ子の場合の正しい結果を得るための処理

下層の繰り返しフィールドに対する処理が開始される前に個数を取得しておけば正しい結果が得られます。


	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 の多重繰り返しフィールドにおける構文

(※ 当ページは社内技術資料としての位置付けですので読みにくいこともあるかもしれませんが、一般の方の課題解決に役立てれば幸いです。)

弊社サイトご案内

(WordPress化と同時に対応できます)

ブロックエディタ対応サービス

ブロックエディタ導入で、コンテンツの編集や追加が容易に安全に達成可能!
サイトのコンテンツ保守費用0円化に大貢献!

PHP8アップデートサービス

PHP8にアップデートしてWordPressの実行速度向上・セキュリティ向上に!

関連記事一覧

わぷー WordPress化お見積り