ACF灵活场内的循环计数器

时间:2017-07-27 03:36:45

标签: php advanced-custom-fields

我使用高级自定义字段(ACF),我有灵活的内容部分设置。

我试图循环计数器,以便为每个标签部分添加唯一ID。

这是我的代码以及我尝试过的内容。我试图在程序手风琴div中添加一个外部循环,以便在没有太多运气的情况下循环计数器。

elseif ( get_row_layout() == 'program_accordion') : $counter = 0;               

       while ( has_sub_field('program_accordion') ) :

         $counter++; ?>

        <div class="program-accordion">

          <input id="tab-<?php echo $counter ?>" type="checkbox" name="tabs">

          <label for="tab-"><?php the_sub_field('accordion_title'); ?></label>

          <div class="tab-content">

          <?php the_sub_field('program_description_accordion');

                if( have_rows('accordion_speaker_fields')) :

                while( have_rows('accordion_speaker_fields')) : the_row();  ?>                          
                  <img src="<?php the_sub_field('accordion_image'); ?>">

                  <?php the_sub_field('accordion_lightbox_content'); ?>                                             

                <?php 

                endwhile;                                           

                endif; ?>

           </div>

           </div>

    <?php 

    endwhile;

    endif; 

我一直在努力浏览这里的文档:https://www.advancedcustomfields.com/resources/has_sub_field/和此处:https://support.advancedcustomfields.com/forums/topic/unique-ids-for-each-layout-row/但我只是碰到了一点墙。

我想知道它是否与我正在调用的字段有关,以及这些是否准确,因为没有内容显示。我在ACF中的字段已根据下图设置。

非常感谢任何帮助。

ACF Field Setup

1 个答案:

答案 0 :(得分:1)

问题在于你的while循环。

while(has_sub_field('program_accordion'))循环不执行任何操作,因为program_accordion只是布局名称,所以没有子字段。

你的字段结构意味着每个program_accordion只有一个标签,所以我假设你希望计数器为所有标签增加,而不仅仅是每个program_accordion中的标签(因为在这种情况下它们总是1)。因此,您还需要在主循环之外移动计数器初始化,因此您不必为每个选项卡重置它。

(如果您遇到问题,可以打印出所有ACF字段,以便更清楚地查看结构,例如print_r(get_fields());

基于该假设,以下内容将增加每个标签的计数器:

$counter = 0; 
// I presume this is your outer loop...
if( get_field('description_container') ):
    while( has_sub_field("description_container") ): 

    if (/* whatever condition you had here */):

    elseif ( get_row_layout() == 'program_accordion') : 
        // REMOVE THIS LOOP:
        // while ( has_sub_field('program_accordion') ) : 

         $counter++; ?>

        <div class="program-accordion">
            // display accordion content here
            // FYI, you're missing the $counter var from your label
        </div>

    <?php 
    // endwhile; - of removed loop
    endif; 
endwhile;
endif; 
?>