大猫の意淫筆記
19
Nov

如何在wordpress the_category() 函数生成的分类列表里移除指定分类名链接

hack the_category()身为 WordPress 中文团队不活跃团员之一,俺觉得是时候做点啥了

比如出个 hack 介绍如何从
the_category() 函数生成的分类列表里移除指定的几个分类名的链接

做过模板的小盆友都知道,一篇文章可对应多个分类,在循环

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

里,可以用

< ?php the_category( $separator, $parents ); ?>

the_category('*') 输出当前文章的分类,并用菊花符 * 来分隔,比如

分类: < ?php the_category('*'); ?>

会输出

分类:wordpress*hack*category

在内部 Blog 搞皮肤的时候接到一条规则,要求有个分类叫重点的,然后又不要显示出来,仅仅用来作为 query_posts() (非常牛逼的函数,内容太多,有机会另起文章介绍强大的筛选功能) 获取文章的一个筛选条件

辣么,就需要 hack 一下 the_category() 了

很幸运 WordPress 提供了一个 ooxx 函数叫

< ?php add_filter( $tag, $function_to_add, $priority, $accepted_args ); ?>

根据 Smashing Theme 的一篇文章,把如下代码丢到 functions.php 最底部的 ?> 内即可实现

function the_category_filter($thelist,$separator=' ') {
	if(!defined('WP_ADMIN')) {
		//要移除的分类ID,这里是1和5
		$exclude = array(1,5);
		$exclude2 = array();
		foreach($exclude as $c) {
			$exclude2[] = get_cat_name($c);
		}
		$cats = explode($separator,$thelist);
		$newlist = array();
		foreach($cats as $cat) {
			$catname = trim(strip_tags($cat));
			if(!in_array($catname,$exclude2))
				$newlist[] = $cat;
		}
		return implode($separator,$newlist);
	} else {
		return $thelist;
	}
}
add_filter('the_category','the_category_filter', 10, 2);

解题思路就是先获取当前文章对应的分类 ID 数组,explode() 打散,和自定义的那个ID进行对比,如果有就移除,返回过滤后再 implode() 合并后的列表给 the_category() 输出到模板对应的前台页面

假装异步加载ing

订阅大猫的RSS feed,不错过一部AV~ 分享到QQ空间

» You can leave a comment, or trackback from your own site.

大战 37 回合 to “如何在wordpress the_category() 函数生成的分类列表里移除指定分类名链接”

  1. A.shun says:

    呀。。Wordpress 中文团队。。。还有你 :idea:

    Reply

    bigCat:

    @A.shun, ;) 虽然身为团队里PHP最菜的鸟, 并且为人低调,憨厚老实,但也掩盖不了光芒,哎呀呀

    Reply

  2. 左岸读书 says:

    终于谈点技术的了~ :)

    Reply

    bigCat:

    @左岸读书, 最近开始每天固定时间看书,恩,哈哈

    Reply

  3. Dianso says:

    学习了。。

    你代码黑色部分怎么弄的啊,这么酷。

    Reply

    bigCat:

    @Dianso, FF下圆角+黑色背景+边框色...

    Reply

  4. Evance says:

    还有内部blog

    Reply

    bigCat:

    @Evance, HTML5写的主题哟,很裤~偶负责后台 - -

    Reply

    bigCat:

    @Evance, :) 人多,人才也多,内部的blog逻辑还是有点复杂的...

    Reply

  5. 小O says:

    纯支持,太酷了@!那部分黑色的代码。

    Reply

    bigCat:

    @小O, 哈哈,CSS3~ 简单,强劲

    Reply

  6. chisdy says:

    呀,这篇文章比较感兴趣。

    Reply

    bigCat:

    @chisdy, 嘿,我以后多写些别人木有的

    Reply

  7. TryLife says:

    :oops: 后方炮火支援

    Reply

    bigCat:

    @TryLife, :o 雕虫小技,和大侠没的比,哈哈哈

    Reply

    TryLife:

    @bigCat, :?:
    我也就是混日子的,对WP一窍不通;
    对你景仰中 :lol:

    Reply

  8. lifishake says:

    俺还是喜欢直接改SQL语句.有种暴力的快感.

    Reply

    bigCat:

    @lifishake, ;) 含蓄点嘛……

    Reply

    Jerry Chen:

    @bigCat, 暴力一点才爽~

    Reply

  9. tuifei.net says:

    直接修改数据库吧!

    Reply

    bigCat:

    @tuifei.net, - - 要温柔,可持续可升级

    Reply

    Jerry Chen:

    @bigCat, 男人就要对自己狠一点

    Reply

    tuifei.net:

    @Jerry Chen, 用飘柔,就是这么自信!

    Reply

    Jerry Chen:

    @tuifei.net, 不用TT,更加快~

    Reply

    tuifei.net:

    @Jerry Chen, TT,只用杰士邦.

    Reply

    bigCat:

    @tuifei.net, 杰士邦感觉和纸袋子一样,偏爱冈本或杜蕾斯

    Reply

    tuifei.net:

    @bigCat, 下次改内射!!!

    Reply

  10. TryLife says:

    牛博 就是牛博
    一天从你这来了X个流量,站全天的百分之XX.X了

    Reply

    bigCat:

    @TryLife, 视流量如粪土
    也不知道赚个钱啥的

    Reply

    TryLife:

    @bigCat,
    君子爱财取之无方,不来也咩办法

    Reply

  11. ken says:

    我是一个崇拜者。。。请问最后的10,2代表什么? :?:

    Reply

    bigCat:

    @ken, add_filter( $tag, $function_to_add, $priority, $accepted_args );
    一个是优先级,一个是接受的参数数量

    Reply

    ken:

    @bigCat, 呵呵~其实我想说的是,这一句报错了。。。。不知道错在哪。。。

    Reply

    bigCat:

    @ken, 囧,没出错提示么?

    Reply

  12. bolo says:

    呃,这个要仔细学习

    Reply

  13. 郑州seo says:

    关键我现在在找个这函数的文件是哪个

    Reply

Leave a Reply

:!: :roll: :o :lol: :P :( 8O :x :oops: :) :?: :idea: :evil: ;) :twisted: XHTML<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>