正确答案:
感谢代码宇宙
$i=0;
<?php while(have_posts()):the_post();?>
if ($i % 5 == 0) {
echo '<p class="box">';
}
echo '<p class="post">...</p>';
if ($i % 5 == 4) {
echo '</p>';
}
$i++;
<?php endwhile;wp_reset_query(); ?>
if ($i % 5 != 0) {
echo '</p>';
}
原文内容:
注意,这是一个细思极恐的问题,请仔细阅题!
首先,有一个不能改变的条件,就是循环输出内容的代码,例如
<?php while(have_posts()):the_post();?>
//此处将循环输出多篇文章
<?php endwhile;wp_reset_query(); ?>
我需要输出的HTML格式如下
<p id="content">
<p class="box">
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
//一共五篇,也就是5个POST
</p>
<p class="box">
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
</p>
<p class="box">
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
<p class="post">...</p>
</p>
</p>
条件:
文章数量不确定,一定>5
每隔5篇文章,需要使用一个Box的p包裹(难点在此,第一次输出<p class="box">,第五次输出</p>)
你不可以把每5个post存一下其他地方,然后最后一起输出!
一个栗子
= =!!! 这不是很简单吗... 有毛难度啊
$postCount=0; //文章计数
echo '<p class="box">';
<?php while(have_posts()):the_post();?>
//此处将循环输出多篇文章
$postCount++;
echo '<p class="post">...</p>';
if( $postCount > 1 && $postCount% 5 == 1 ){
}
<?php endwhile;wp_reset_query(); ?>
echo '</p>';
<?php
?>
问题描述的有点简单啊。不过要计数起码要有个产量吧,设置一个i每输出一次i+1,自己尝试一下,这肯定不难实现吧
这个和我以前,做的显示图片一样,5张一列显示。
数据结构:
list
最终输出结构list<listi>
第二个listi的大小为5,把数据依次放到listi中,最后用listi放入list,页面输出listi就可以了。
规则其实不难梳理。盯住“已经写入DOM的节点数有多少个”,然后把适当的事件同时插入到节点写入DOM的前后,并不难做。
这个问题唯一的麻烦是:迭代过程中,我们无法知道本次迭代是最后一次。因此迭代结束后,如果总数不被5整除,最后必然剩下一组未封口。所以迭代结束后必须要有一个检查。
烧脑可以,实际工程切勿如此耍巧。请老老实实的在V(View)层抛弃这种取一个输出一个的循环方式。
你需要一次取一批(5个或取到底),然后无脑套一个
<p>
分组输出。适合实际工程的循环方法(伪代码)应该是这样的:题主在题面中否定的“把每5个post存一下其他地方,然后最后一起输出”,其实在实际工程中恰恰是对的。别忘记就好。
我提供我的方法供参考: