一月
13

WordPress主循环控制——精确控制文章列表

写在开头:

这几天真是风波不断,先是昨天百度被黑,今天谷歌又宣布可能永久退出中国。但是我没闲着,昨天把主题代码整理了一下,又制作了中文语言包,接下来可能会考虑往官方提交。今天又给前几日建的一个bbpress制作了一个简单的主题,主要是和我的博客相配。然后对这个bbpress和我的WordPress博客进行了数据库整合、cookie共享。

+++++++++++++++++++++++++++++++++++++++++++++++

因为时常有人在加我QQ说有问题问我,久而久之我的QQ上就有了一大批陌生人,因为问过问题之后我们就几乎不会再联系。所以我就想建个bbpress,如果你有一些小问题什么的,尽量不要加我QQ了,可以直接在我博客提问,或者也可以到这个小型的讨论区来发帖询问。

+++++++++++++++++++++++++++++++++++++++++++++++

博客评论字数什么的有限制,bbpress则比博客的评论宽松许多。不过,在bbpress提问,需要先注册一下。注册了之后这个账号就可以横行这个bbpress和我的博客,在www.qiqiboy.combb.qiqiboy.com都可以登录。在bbpress登陆后再访问我的博客就依然是登陆状态。登陆之后你就不必再输入姓名,邮件之类,直接就可以发表评论,而且没有一丝广告,和我登陆后看到的情形一样的。

传送:QiQiBoY’S BB

有相当一部分人还不了解bbpress吧,可以看维基百科的解释。bbPress

就像你们看到的http://www.qiqiboy.com/blog,这个页面第二篇和第三篇日志下方有广告,而其他日志都没有。还有情况下,我们想要单独设置每一篇文章的展示形式,这种情况下如何实现?

一种方法是单独请求每篇文章数据,另一种就是用一个循环标识数字来控制。第一种方法麻烦,不是特殊情况下用不到,第二种方法则可能会经常用到。比如,添加广告,控制第X篇文章的标题、tag、category,甚至前半部分与后半部分文章输出内容格式的不同(摘要与截断)等。

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

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

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

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

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

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

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

实际应用例子可看本站blog页面的广告位。还有许多CMS模板,文章模块一般都是只显示首篇文章摘要,也应该是这么做的的。mg12的现在的模板首页,之前是完全动态加载,现在为了seo也改成了前三篇直接输出内容,后面的才动态加载。没问过他,但是我想他也大概是这么做的。

我觉得这个还是很有用的一个小技巧,很简单,很实用。

WordPress技巧

 

——By QiQiBoY

本文标签: , , , ,

分享

本文短网址: http://qiqi.boy.im/1c

这篇文章已经有 44 条评论

Comments (43) Trackbacks (1)
You can leave a response or Trackback this entry .
  1. edikud -#21

    <?php $v = $con++; if ($v==0){ ?><?php the_excerpt(); ?><?php }?>

    ————————–

    <?php $v = $con++; if ($v<1){ ?><?php the_excerpt(); ?><?php }?>

    这样也可以吧!

    • QiQiBoY --#1

      @ edikud : 你又将$con传递给$v,多这一步干啥。。。你省掉这一部,直接用$con变量去比较,然后在后面再自加1,$con++不更好吗
      < ?php if ($v<1){ ?>< ?php the_excerpt(); ?>< ?php } $con++; ?>

  2. edikud -#22

    <?php if ($count <1) : ?> //你的代码 <?php endif;$count++; ?>
    ————————————-
    <?php if ($wp_query->current_post < 1) : ?> //你的代码 <?php endif; ?>
    我就用下面的代码,不知哪种好?

    • QiQiBoY --#1

      @ edikud : 你要是指哪种方法更高效,更节约服务器资源,这个我还真不太清楚。。。。应该差不多吧。。。。能达到效果就行了。。 :smile:

  3. Firm -#23

    两段广告感觉很影响阅读。

  4. zealer -#24

    如何使置顶只显示标题

  5. 沉寂号 -#25

    还是做不出来你首页的效果,能到我博客帮我看看不?
    沉寂号http://www.quietry.com/
    我就想让页面标题最右边的图标加上贵站的那种滑动效果

  6. HillBoy -#26

    点了维基百科链接,却发现没有条目。。。

  1. Hello WordPress!

    [...] 2010.01 我开始在自己博客上使用cms式首页,这种风格到现在我还在一直使用新版CMS简式首页上线测试ing……,还介绍了WordPress自动获取+调用页面主循环日志中的图片,当然还有一个首页不应该缺少的两项功能:置顶+日志预告,这个也不能忘WordPress主循环控制——精确控制文章列表 [...]

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: