可能真的是力不从心吧?实在是没有动力再去研究wordpress的PHP结构,想建一个专属的分类页面,都要在google上找现成的,真是体会到了天下文章一大抄!

其实明白了道理后,是个很简单的工作,却费了我不小的时间。简单介绍一下:

从一篇教程上看这个原理是叫”文章质疑”,我是第一次知道这个名词,也不知道到底是不是应该翻译或解释,暂且就这样用吧先!

文章质疑(query posts)并不是WordPress中一个很难理解的技巧,简单说就是只让站内首页显示某几个分类的文章。

做法:在index.php文件中找出这句:

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

在其上方添加质疑语句:

<?php
if (is_home()) {
query_posts("cat=-3&showposts=5");
}
?>

上面语句中的cat=-3代表的是把分类ID为3的文章去掉。如果写成cat=3,没有负号在前,就表示只显示分类ID为3的文章,大家注意这个负号的意思。如果需要去掉多个类别,请用英文逗号分隔,如写成cat=-3,-4;如果只需要显示几个类别,写成cat=3,4则可。

另外showposts=5代表的是显示5篇文章,这个数字大家可以自己更改。

通过上面的方法,基本可以满足大家对首页只显示指定文章功能的实现。这里还有要注意的是这个方法的页面中分页功能不能。解决办法是,把上面文章质疑的语句稍作更改如下:

<?php$limit = get_option('posts_per_page');$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;query_posts('cat=-1&showposts=' . $limit=5 . '&paged=' . $paged);$wp_query->is_archive = true; $wp_query->is_home = false;?>

其中我们把限制文章显示数改为变量调用:$limit=5,修改这里的数字则可。这样就能继续正常使用类似page-navi,page-bar的WordPress分页插件了。

当你利用query_posts("cat=-3&showposts=5")这样的代码去除分类3的文章时,你也可以利用query_posts("cat=3&showposts=5")这代码只显示分类3的文章。所以,我们新建一个页面模板,譬如命名为your-special-page.php。利用文本编辑器编辑该文件,在其开头加上:

<?php
/*
Template Name: Your special Page
*/
?>

注意,这段代码必须要有,虽然看起来像注释,但确实在声明模板名称,等下创建页面时要用到,很奇怪php里居然可以这样子使用注释代码。这位老兄就是因为误以为是注释而浪费了很多时间。

如果你想简单点的话,就在上面代码后直接把index.php内的文件内容复制进去,但要注意,我们需要在下面这一句:

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

的前面增加如下代码:

<?php
$limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('cat=3&showposts=' . $limit=5 . '&paged=' . $paged);
$wp_query->is_archive = true; $wp_query->is_home = false;
?>

这样,我们就能让其只显示分类ID为3的文章内容。

接着我们把这个your-special-page.php文件上传到WordPress主题模板目录内。然后我们在后台新建一个页面,名称自定,内容为空,但必需注意在页面模板一栏选择“Your special Page”,然后选择发布,你便能实现在该页面显示自己选定的分类文章。

另外在这里顺带补充一下对文章内容显示控制的几点:

1. 如果你已经在首页中隐藏了某些分类的文章,同时你也想在WordPress的分类列表中隐藏那些分类,可以用<?php wp_list_categories('exclude=4,7'); ?>这个调用代码,例子中的是在分类列表中去除ID为4和7的分类;

2. 如果再进一步,你想在你的feed中去除那些隐藏的分类文章。这里有一个简单的办法,就是在主题目录下的functions.php中添加如下代码:

function my_cat_exclude($query) {
if ($query->is_feed) {
$query->set('cat','-20,-21,-22');
}
return $query;
}
add_filter('pre_get_posts','my_cat_exclude');