在 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……

本文已盖 115 层楼

  1. 回复 tips 说:

    谢谢万兄,解决了我一个大问题。

  2. 回复 iipop 说:

    恩恩,这对我很有帮助 :twisted: :twisted: :twisted:

  3. 回复 enter 说:

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

  4. 回复 kelvin 说:

    正在找这方面的内容呢 呵呵 收藏了 ~!

  5. 我首页的文章分类想显示两列,而且只显示某个大分类下的小分类,并且不要括号,请问这个怎么实现啊

  6. 我没太研究WP,但直觉上,处理这个应该不用循环吧。

  7. 我的神,又是代码,头大了。 :eek:

  8. 回复 bolo 说:

    会用几个基本的调用就能做一个主题了,不难的

  9. 其实只要多逛逛Wordpress官方文档网站,很多功能都可以轻松实现

  10. 回复 pigi 说:

    我仿佛每次换主题后pr都会降 然后过很长时间升回来,万戈同学能帮助解决这个问题么?

    • 回复 万戈 说:

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

  11. 回复 北街 说:

    喜欢diy,可惜了自己不是搞代码的~ :arrow:

  12. 看望朋友,会经常来分享你的有好文章

  13. 我偷偷这样干过!

  14. 回复 午夜 说:

    本楼77,大家庆贺下,万戈老弟开个露天party吧

  15. 回复 喵喵呜 说:

    刚想得瑟一下这次这么靠前,仔细一看,已盖75层……嗯,站在楼顶看风景不错,好辽阔!

  16. 回复 猴子 说:

    作为一个Z-blog用户+WP白痴,我纯水一次,哈哈。 :twisted:

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

  18. 回复 崔凯 说:

    这东西好!我研究研究!

    之前都是套同样的模板做静态页,这个如果搞定,就省事多了。

  19. 回复 iBoluo 说:

    好专业,看不懂,围观好了。

  20. 回复 kenshin 说:

    万戈童鞋怎么成专业搞PHP的了……

  21. 回复 漠天 说:

    CMS主题比较合适,O(∩_∩)O哈哈~

  22. 回复 Nox 说:

    万戈兄,首页没有我的链接,伤心啊。。 :cry:

  23. 回复 leecay 说:

    是根据日志分类来显示不同的广告,而不是让广告随机显示啊 :arrow:

  24. 回复 licream 说:

    貌似好复杂..哎先收藏下

  25. 回复 happyet 说:

    不搞就不搞,一搞就是这么高层次的 :roll:

  26. 回复 zwwooooo 说:

    又折腾了,你收藏好,我要用时直接 CP :twisted:

  27. 非常有用的代码,收藏到wordpress代码集了。

  28. 你咋这么强呢。。。看来这次更新不规律让大家不适应啊。。。哈哈,不过晚上去看书了,就有这么多童鞋来。。。 :evil:

  29. 回复 619 说:

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

  30. 回复 江流 说:

    你也该是时候自己弄个主题了 :mrgreen:

  31. 回复 飞晏 说:

    真没规律 导致我来的时候飘过40位童鞋了
    技术贴 收藏

  32. 回复 smigoo 说:

    貌似煎蛋就是这样办滴 嘿嘿~ :roll:

  33. 回复 DDBUG 说:

    query_posts($query_string.'&cat=-1');
    可以解决分页无效的问题

  34. 回复 苏扬 说:

    求爷爷拜奶奶也找不到一个这样专心PJ的人,WP的童鞋有福啊,万戈万岁

  35. 回复 QiQiBoY 说:

    你调用$limit变量时又给赋值$limit=10,之前的定义$limit = get_option('posts_per_page');就无效了啊。。

  36. 回复 少杰 说:

    你更新不很有规律的吗?
    今天怎么那么变态啊!

  37. 回复 星网 说:

    这个文章我是一点都没看懂啊!

  38. 回复 SErHo 说:

    好不容易第一次这么靠前,不过不出几分钟,我的留言将消失在第一页了 :!:

  39. 回复 evlos 说:

    小邪一直没搞懂代码里冒号和问号的意思 = =
    好像是另外一种写法,万戈兄有啥心得吗?

    • 回复 万戈 说:

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

    • 回复 Nox 说:

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

  40. 回复 Nox 说:

    好了,此广告位招租,价格面议。。

  41. 回复 Nox 说:

    板凳啊,板凳。。。。继续坐。

  42. 回复 Nox 说:

    沙发啊,沙发。。。。我来了。

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

Leave a comment

ipage返佣

您已输入0

三言两语

我的生活心情语录

工作手札

路漫漫其修远兮

精品推荐

好东西要分享

嘻哈娱乐

八卦趣事一笑而过

电脑网络

全新技术尽搜罗

转来载去

文人墨客美文赏析