【发布时间】:2017-01-15 13:48:38
【问题描述】:
我本质上是使用一个 foreach 循环来遍历一些帖子类别,然后为每个类别中的帖子输出一些标记。我认为我的变量 $ii 会在 foreach 的每次迭代中被重置,但它会发生变化(我的愚蠢假设)。我确实需要在每个循环开始时 $ii=1 ,有没有办法做到这一点?下面是基本代码结构
$cats = array(
'cat1' => 20,
'cat2' => 21,
'cat3' => 22,
'cat4' => 23
);
foreach($cats as $cat){
$ii = 1;
$cat_name = get_cat_name($cat);
echo "<div class='container'>
<h1>$cat_name</h1>
";
while( have_posts() ) : the_post();
$title = get_the_title() . ' ' . $ii;
if( in_category($cat) ){
echo "<p>$title</p>";
}
$ii++; endwhile;
echo '</div>'; // end container
}
对于每个类别中的三个帖子,输出的内容基本上是:
Cat1
- title 1
- title 2
- title 3
Cat2
- title 4
- title 5
- title 6
etc.
我想要的输出是:
Cat1
- title 1
- title 2
- title 3
Cat2
- title 1
- title 2
- title 3
有没有办法为每次迭代重置变量以实现我想要的输出?或者更好的方法来做到这一点?还没有找到任何关于它的东西。不过,看起来很简单。先感谢您!
编辑: 这里的一堆答案有一些工作,但是将计数器范围限定为条件帮助我解决了我需要的问题。一种解决方法,但我基本上只需要检查我是否在特定类别的 while 循环的第 5 次迭代中,以针对特殊情况输出某个标记块。 (对不起,如果我提出问题的方式让我的目标有点模棱两可,我正在运行的实际循环中发生了很多事情 - 我想让它尽可能简单。)所以,到目前为止,解决方法看起来像这样:
if( $cat == $cats['cat2']){
$ii++;
if($ii === 5){
echo '<hr>';
}
}
仍然觉得有一种更强大的方法可以实现这一点,我对它的新想法持开放态度,但它现在正在工作!
【问题讨论】:
-
将
$ii = 0;放在foreach(){}循环之前,然后使用$title = get_the_title() . ' ' . ++$ii;。摆脱$ii的所有其他用途。
标签: php wordpress loops foreach while-loop