WordPress循环中$iNew自增输出为空及$i++输出方法咨询
嘿,我来帮你搞定这两个技术问题!
问题1:如何在循环中输出$i++?
既然第二个问题是PHP/WordPress场景,咱们默认说PHP里的写法哈。$i++是后置自增运算符,逻辑是「先使用变量当前值,再把变量加1」,所以在循环里用它输出序号,分两种常见场景:
从0开始输出序号:
先初始化$i为0,循环里直接输出$i++,第一次输出0,之后每次自动加1:$i = 0; while (/* 你的循环条件,比如 $i < 5 */) { echo $i++; // 输出0 → 1 → 2... }从1开始输出序号:
要么初始化$i为1,用$i++;要么初始化$i为0,用前置自增++$i(先加1再输出):// 写法1 $i = 1; while (/* 循环条件 */) { echo $i++; // 输出1 → 2 → 3... } // 写法2 $i = 0; while (/* 循环条件 */) { echo ++$i; // 先把$i变成1再输出,结果也是1 → 2 → 3... }
注意:一定要在循环外面初始化$i,不然每次循环都会重置变量,输出的永远是初始值。
问题2:WordPress中$iNew输出为空的问题
你这是踩了变量作用域的坑!咱们一步步拆解:
问题根源
你在主循环里定义的$iNew是局部变量,但get_template_part()函数会在一个独立的作用域里加载模板文件——也就是说,模板里根本访问不到主循环里的$iNew,所以输出的就是空span。
解决方法(按WordPress规范排序)
方法1:用set_query_var()传递变量(最推荐)
这是WordPress官方推荐的变量传递方式,避免全局变量污染:
- 主循环里,调用
get_template_part()之前把$iNew传进去,然后再自增:<?php $count = 0; $iNew = 0; $query = new WP_query('posts_per_page=3'); while( ($count < 3) && ($query->have_posts()) ) : $query->the_post(); if (!in_array($post->ID, $ids)){ $ids[] = $post->ID; $count++; // 传递变量到模板 set_query_var('iNew', $iNew); get_template_part( 'template-parts/content', 'art-small-new' ); // 传递后再自增,保证下一篇文章编号+1 $iNew++; } endwhile; ?> - 模板文件里用
get_query_var()获取变量:<span class="iNew"><?php echo get_query_var('iNew'); ?></span>
方法2:用全局变量(简单直接)
把$iNew声明为全局变量,让模板能访问到:
- 主循环里声明全局:
<?php global $iNew; // 声明为全局变量 $count = 0; $iNew = 0; $query = new WP_query('posts_per_page=3'); while( ($count < 3) && ($query->have_posts()) ) : $query->the_post(); if (!in_array($post->ID, $ids)){ $ids[] = $post->ID; $count++; get_template_part( 'template-parts/content', 'art-small-new' ); } endwhile; ?> - 模板文件里也要声明全局再输出:
<span class="iNew"><?php global $iNew; echo $iNew++; ?></span>
方法3:用include代替get_template_part()(不推荐但简单)
include会继承当前作用域,所以模板能直接访问$iNew:
- 主循环里替换:
// 把 get_template_part(...) 换成下面这行 include(locate_template('template-parts/content-art-small-new.php')); - 模板里直接用原来的代码就行:
<span class="iNew"><?php echo $iNew++; ?></span>
额外检查点
如果上面的方法都没用,看看是不是PHP短标签没开启:把模板里的<? echo ... ?>改成完整的<?php echo ... ?>,避免因为短标签禁用导致代码不执行。
内容的提问来源于stack exchange,提问作者Patryk LL
相关产品推荐
相关产品推荐

