ACF重复器增量计数器与reset_rows使用问题求助
修复ACF重复器循环计数器的问题
我一眼就看到了你代码里的两个关键问题,导致第二个循环的计数器一直显示为0:
问题1:第一个循环的计数器变量语法错误
你在第一个循环末尾写了project_counter++;,这里少了变量前缀$,PHP会把它当成未定义常量处理,导致计数器根本没正确递增(甚至可能触发警告)。
问题2:第二个循环的计数器初始化位置错误
你把$project_counter = 0;放在了while循环的内部,这意味着每次循环迭代都会把计数器重置为0,所以不管循环多少次,输出的永远是project-0。
修正后的完整代码
<?php if (have_rows('projects')) : // 初始化第一个循环的计数器 $project_counter = 0; ?> <!-- 第一个循环:生成项目链接 --> <?php while (have_rows('projects')): the_row(); ?> <div> <a href="#project-<?php echo $project_counter; ?>" class="project-link">Link to project</a> </div> <?php $project_counter++; endwhile;?> <?php reset_rows();?> <!-- 第二个循环:生成项目内容块 --> <?php // 重置计数器,这次要放在循环外面! $project_counter = 0; while (have_rows('projects')): the_row(); ?> <div id="project-<?php echo $project_counter; ?>"> <p>Project Content</p> </div> <?php $project_counter++; endwhile;?> <?php endif;?>
关键修改点解释
- 第一个循环里把
project_counter++;改成$project_counter++;,确保变量正确递增。 - 第二个循环的
$project_counter = 0;移到了while循环外部,这样整个循环开始前计数器重置为0,每次迭代只执行递增操作,就能得到0、1、2的正确序列。 - 保留
reset_rows()调用,确保第二个循环能重新遍历ACF重复器的所有行。
修改后就能实现你期望的渲染效果:链接的href和内容块的id一一对应,计数器从0开始正常递增。
内容的提问来源于stack exchange,提问作者ultraloveninja
相关产品推荐
相关产品推荐

