我使用高级自定义字段(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中的字段已根据下图设置。
非常感谢任何帮助。
答案 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;
?>