一月
08

一个首页不应该缺少的两项功能:置顶+日志预告

或者说,我是如何展示我的博客首页的。

首页是很重要的,它担负着向访客展示网站重要内容,页面导航的作用。对于WP来说,非cms首页一般都是在首页展示最新日志,以列表形式呈现。我们还要考虑seo,像http://www.qiqiboy.com/blog这样的列表形式就会很不利于seo,因为搜索引擎只能抓取文本文字,这样动态加载的列表形式是不能为爬虫正常访问的,所以只能抓取到文章标题。这还不是我要说的,我想说的是,对于WordPress来说,一个首页应该包括的基本内容,不知道其它作主题的人有没考虑到。

第一是文章置顶功能,早期的WP需要插件来实现,但是现在WP在2.7以后都已经内置支持了。所以首页应该有支持置顶文章。如何支持呢?如果是在页面主循环中,要保持置顶文章与其它文章的样式不同,则只需用is_sticky()函数判断,即在主循环

   1: <?php while (have_posts()) : the_post(); ?>

后添加

   1: <?php if(is_sticky()) { ?>
   2: //你的样式
   3: <?php } ?>

在{}中单独定义对置顶文章的样式设定,如标题颜色,如何显示内容(摘要,more截断,全文)等。

一个简单列子

   1: <?php if(have_posts()) : ?><?php while (have_posts()) : the_post(); ?> 
   2:         <div class="post" id="post-<?php the_ID(); ?>">
   3:         <?php if(is_sticky()) : ?>
   4:         <h2><?php _e('[置顶]'); ?><a class="title stickytitle" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
   5:         <?php else : ?>
   6:         <h2><a class="title" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></h2>
   7:         <?php endif; ?>//结束置顶判断
   8:         <?php the_content('Read more...'); ?>
   9:         </div>
  10: <?php endwhile; ?><?php endif; ?> 

例子中对于置顶文章添加了一个class属性 stickytitle ,同时标题前面加上了“[置顶]”表示文字。你不需要关注如何使置顶文章显示在其它文章前面,因为你使用WP默认的主循环它就会自动将置顶文章显示在其它文章前面。

但是,对于有些时候,我们需要将置顶文章显示在页面主循环之外其它位置,不在主循环中展示,这是怎么办?即如何将置顶文章在他处调用?可以用query_posts函数,这个会改写并取代页面的主查询。get_option(‘sticky_posts’)参数返回所有置顶文章的数组形式。

   1: <?php query_posts(array('post__in'=>get_option('sticky_posts'))); ?>

在置顶文章的循环前加上这个,就会只返回置顶文章了。然后剩下的文章,如果要排除指定的文章,则可以在这些文章的循环前加上

   1: <?php query_posts('caller_get_posts=1'); ?>

排除置顶文章。即页面上两处循环,置顶文章循环前加置顶调用参数,其他文章循环前加上面的代码。

说完置顶,还有一个功能我觉得也是不可少的,那就是文章预告功能。即你在后台设定了一篇文章在某个时间自动发布,在首页显示这篇文章的发布信息。如何使用呢,只需新建WP_Query对象查询即可。

   1: <?php $my_query = new WP_Query('post_status=future&amp;order=ASC'); ?>
   2: <?php while ($my_query->have_posts()) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?>
   3: //你的循环
   4: <?php endwhile; ?>

这样就可以将预定时间发布的文章的信息调用了。你可以参考主循环,对标题日期等进行样式设定,还可以设置是否显示内容摘要等。

————————————————分割线————————————————————

我是如何处理置顶、文章预告与自然文章的?

在传统的列表形式首页(http://www.qiqiboy.com/blog),我是将文章预告与站内公告,搜索引擎访客提示等结合在一起的,文章预告会以标题列表形式在站内公告栏处显示。置顶文章则会在标题前加上 [置顶] 标识.对于我刚做的CMS式首页,则将置顶文章、预告文章与主循环与次级循环结合起来,没有置顶和预告文章时,slideshow右边显示最新发布的一篇文章的标题、日期、评论数即截断一定字数的摘要或日志内容,下方的五篇文章则是排除了这篇文章的最近五篇文章。如果有置顶或预告文章,则会在这儿显示置顶或预告的文章。同时,下方的五篇最近日志则只会排除置顶文章(预告文章无需排除)显示最新的文章。

本文标签: , , , ,

分享

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

这篇文章已经有 40 条评论

Comments (39) Trackbacks (1)
You can leave a response or Trackback this entry .
  1. 土狼妹妹 -#21

    这个第一次看到收藏了

  2. zealer -#22

    看了你的代码,已经修改成功

  3. 许忠成 -#23

    来学习。

  4. 杜撰人生 -#24

    这个主题似乎有Bug,鼠标放在文章上会使文章部分一片空白。

  5. 挨踢小茶 -#25

    不错哦,描述得很详细,回去验证一下。

  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: