在 WordPress 循环中排除某分类

最近正打算要改版当前主题,不只是外观上,还有在内容上,不过在技术上还有些小问题,每次折腾 WordPress 都会有收获,这次也是,已经解决了一些 WordPress 的问题,老规矩,写下来当笔记。

一、Wordpress 主循环外排除特定分类:

用途举例:一般 WordPress 主题的 index.php 都是输出所有分类的日志,但是对于不同的需求可以 DIY 一下,比如说你想隐藏某特定分类下的日志,让其不在首页显示,但是这又不同于私有日志,它是公开可见的。这时候就需要在 the loop 之外将此特定分类排除。

在 WordPress 默认模板中,主循环调用文章的代码格式如下:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
//主循环内容
<?php endwhile; ?>
<?php endif; ?>

默认情况下,文章调用范围为所有分类。如果排除某分类,可以使用 query_posts() 函数:

<?php query_posts('cat=-1'); ?>

以上代码调用除分类 ID 为 1 外的所有文章。将其插入主循环前即可。

由于 query_posts() 函数会与分页功能造成冲突,可以将 query_posts() 语句替换为:

<?php
$limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('cat=-1&showposts=' . $limit=10 . '&paged=' . $paged);
?>

若需排除特定分类,又要保持分页功能正常,则完整代码如下:

<?php
$limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('cat=-1&showposts=' . $limit=10 . '&paged=' . $paged);
?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//主循环内容
<?php endwhile; endif; ?>

以上方法转自:芒果-WordPress 主循环排除特定分类

二、Wordpress 主循环内排除特定分类:

用途举例:现在可以看到我的每篇日志中左上角都有图片广告,如果某特定分类并不适合投放广告,或者说需要根据日志分类来显示不同的广告,这时候,你就需要用到 in_category 函数,在 the loop 之内排除 WordPress 的特定日志分类。

用法如下:

<?php
if ( in_category( 'pachoderms' )) {
    // They have long trunks...
} elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) {
    // They are warm-blooded...
} else {
    // & c.
}
?>

in_category 函数的具体用法可以参见官方文件

WordPress 真是怎么学都学不完啊,感觉我越学越白痴,离 DIY 属于自己的主题又远了一步,囧rz……

  1. Pingback: TIPS的网志 » 在 Wordpress 循环中排除某分类

  2. 大哥。我最近也在学习自已做模版在本地调试。
    碰到问题想请教大哥您,加我QQ258481432
    我想做一个跟你一样的列表
    index.php里面要怎么改
    才会变成一排双列的文章显示!
    加下我Q谢谢

    • 如果我是google总裁,一定帮你解决此难题,可惜我不是 :arrow:
      不过据我所知,只要不是频繁地更换主题,对PR的影响并不大,google的反应能力还是比较快的

  3. 我的博客正好,很省事。
    我要求首页什么都显示,无论哪个分类。
    我的博客不放广告,要放就什么内容的分类一起放。
    很省事 :oops:

    • 做静态页?要更新岂不是很麻烦~
      用这个方法确实不错,但是在实际操作中还遇到些小麻烦,正在研究中。。。

      • 提个意见:你的每页显示的评论太少,而你的评论又多(羡慕一下),可是你却设为10个评论(楼层)一页,而且评论分页没有显示页数,对于像我这样要回来回复评论的人相当不便,不知其他人有没有这个“烦恼”,哈,建议设为20 + 评论分页页数提示

  4. 我们老师说了,玩代码的编程王,前台都不咋地;前台牛X的,代码都玩的不咋地;哈哈,我就属后者 :lol:

    • 恩,是另一种写法,用了冒号,结尾的时候就要用endwhile或者endif相对应
      只是因为代码长了,循环和判断挤在一起怕看不清楚,就用这种方法区别开来

    • 我也看不懂,但是大致的意思就是,不想让某个分类的文章在Index页面显示,但是又不属于私人文章,是公开的。。。也就是说,必须到该分类目录下,才能看见。丫脑子进水了。。