这次的仍然是我在做Blackboard主题时候遇到的问题:我想在的不同的页面分别显示blog和portfolio,相信这是大多数设计师在做自己博客的时候经常会遇到的问题,网志和作品集都要;或者你正在用搭建一个电子商务网站,要展示新闻和产品页面,该怎么办呢。这里提供几种思路来解决这个问题。
首先描述一下问题出在哪。目前wordpress2.9版本还没有文章“类型”这个概念(未来的3.0版本就有了,不过据说不是很健全),在文章序列(wp_query())里面会按照日期来显示所有的文章,无法只显示哪个分类的文章。这样一来,我们就无法把blog和portfolio两个分类的文章分开来显示了。
方案一:post和page分别用到两种文章blog和portfolio上。
这其实是个很简单的办法,巧妙地避免了区分post的分类的问题。具体地实施如下:
- 新建一个blog分类,然后把所有blog文章放在这个分类下面。当然你可以建任何子类别,文章也可以属于任何子类别(在写文章时,只需要勾上子类别即可)。
- 新建一个portfolio的页面(page)A作为主页面,然后把你所有的portfolio以页面B的形式写出来,并让A是所有的B的父级。
- 问题解决。以后添加任何文章或者页面,就按照这个模式走下去即可。
这个方案方便是方便,但有明显滴缺憾。1.你会有大量的页面存在- -。2.最多你只能将两种类型的文章做成这样,因为wp现在除post和page之外没有第三种了。
方案二:通过简单地修改wp_query()来在不同的页面显示不同的分类文章
这个方法需要对的loop有一定的了解,不熟悉的同学可以去看,其中也包括了对wp_query用法的详细示例。这里直接上代码先:
< ?php $portfolio_query = new WP_Query('category_name=portfolio&posts_per_page=100'); while ($portfolio_query->have_posts()) : $portfolio_query->the_post(); $do_not_duplicate = $post->ID; ?>
解释一下上面的代码。{dy}句 $portfolio_query = new wp_query,是创建portfolio文章序列作为新的wp_query;括号里面的 category_name=portfolio表示这个新的文章序列是属于分类名称为portfolio的(这里也可以用分类ID/slug);posts_per_page=100是说portfolio文章序列里一共显示100篇文章。这段代码比较简单,用它替代你的 if (have_post) 那段php代码即可。
这个原理就是对里面默认的loop做了些修改。同理,你可以在你博客的任何地方再创建一个blog文章序列作为又一个新的wp_query。这样就能满足不同页面显示不同分类的文章了。总之,只要对loop的了解足够深刻,可以千变万化地显示你的文章。
更通用的方案,更像插件的方案
这个方案的原理还是跟方案二一样的,不过老外做事很细致,而且喜欢把东西搞得很正规。在许多国外的主题里面其实已经实现了在不同页面显示不同分类文章的效果,大多数的做法跟官方网站上那位老兄贡献出来的源码是一样的,就是想这样参数化:
$category = ($pcat) ? $pcat : $category; $temp = $wp_query; $wp_query= null; $wp_query = new WP_Query(); $wp_query->query('showposts='.$ppp.'&cat='.$category.'&paged='.$paged);
这样其实和方案二没有本质的区别,它更适合做出来的主题让各种人使用(当然也需要一定的wp知识)。这里还是推荐大家可以直接用方案二,然后手动去研究loop好了。
更进一步:让两个分类blog和portfolio有不同的样式,不同的显示方式!
我下一篇会讲到如何做到这一点。相信这也是很有用的,大家肯定希望作品集显示的信息更集中/更炫,或者说用wp搭建的电子商务网站的产品页面和新闻页面肯定不一样。记得,这样就不会错过下一篇教程了。