北极寒流 » 网络资源 » 利用WordPress主循环精确控制文章列表样式 - 2012.02.29

利用WordPress主循环精确控制文章列表样式

大家如果经常去逛其他博主的网站时可能会发现:有的博客文章的页面第二篇和第三篇日志下方有广告,而其他日志都没有。或者说还有一种情况,我们想要单独设置每一篇文章的展示形式,这种情况下如何实现?一种方法是单独请求每篇文章数据,另一种就是用一个循环标识数字来控制。第一种方法麻烦,不是特殊情况下用不到,第二种方法则可能会经常用到。比如,添加广告,控制第X篇文章的标题、tag、category,甚至前半部分与后半部分文章输出内容格式的不同(摘要与截断)等。

<?php $count = 1; ?>
<?php if(have_posts()) : ?><?php while (have_posts()) : the_post(); ?>

使用方法就是在主循环开始前加上一个$count = 1; 变量。然后在循环主体中,想要改变第n篇文章的不同则在循环部分前面加上

<?php if ($count == n) : ?>
//你的代码
<?php endif;$count++; ?>

所谓循环部分就是常规文章的格式定义。代码中$count=1是第一篇文章,其它文章更改相应编号即可。后面的$count++是让每次循环变量$count的值自加1.

我说的可能不够明白,那么举一个例子,如页面八篇文章,要让前三篇显示more截断,后面五篇只显示标题。可以这么做:

<?php if (have_posts()) : $count=1;while (have_posts()) : the_post(); ?>
<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
<h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<small><?php the_time(__('F jS, Y')) ?></small>
<?php if($count == ( 1 || 2 || 3 )) : ?>
<div class="entry">
<?php the_content(__('Read more &raquo;')); ?>
</div>
<?php endif;$count++; ?>
</div>
<?php endwhile;endif; ?>

将more截断输出内容包含在if语句中,所以只有前三篇会显示more截断内容,后面的都不会显示了,只剩下标题和发表时间。如果你有其他需要,例如让前三篇的标题和后五篇不一样,那你可以在标题循环前,即<h2>标签前面加上if判断定义前三篇的标题。注意不要加到<h2>标签后,因为网页解析是从上自下,加载后面会不起效。

原文

评论关闭