WordPress函数: 分类页面获取当前分类的ID

» 2011-03-07 55条评论

这个功能不是一般的蛋疼,这是我做主题以来最变态的需求。情况是这样的:(举例来说吧,例子很变态,要有心理准备)

1. 假如分类结构如下

商品 》方便面 》统一牌
商品 》方便面 》康师傅牌

商品 》麻烦面 》统一牌
商品 》麻烦面 》出前一丁牌

商品 》不是面 》面霸牌
商品 》不是面 》康师傅牌
商品 》不是面 》爱老虎油牌

2. 产品例子(文章):

“即吃方便面”,其分类属于“主分类 》方便面 》统一牌”

“非常6+1麻烦面”,其分类属于“主分类 》麻烦面 》统一牌”

3. 要求:在点击“方便面”分类下的子分类“统一牌”这个分类时能显示“统一牌”和“康师傅牌”的分类链接,就是显示第二级分类下的所有子分类(第三级分类)

本来下面代码即可:

$cat_name = single_cat_title('',false);
$cat_id = get_cat_ID($cat_name);
$categorys=split(',',get_category_parents($cat_id, false, ',')); //这步好像多余,没测试了
$cat_id = get_cat_ID($categorys[1]);
wp_list_categories( 'title_li=&style=none&child_of='.$cat_id);

4. 问题:当点击“麻烦面”分类下的子分类“统一牌”这个分类时,因为同名,所以 get_cat_ID() 取得的 ID 号就有误了(这也是为何主题制作时一般不用分类名来获取连接什么的——分类名没有唯一性

5. 寻求解决:我本来想,既然有“single_cat_title”这个用来获取当前分类列表的分类名函数,那么是不是有获取 ID 或者“分类别名”的类似函数呢?于是我去 WordPress 的 codex 找,怎么找都没找到此类函数,囧~

6. 解决,既然没有,那么就要看源码了,我看了“single_cat_title”函数源码,然后就自己写出了一个能在“分类文章列表页面”获取当前分类 ID 的函数,好绕口 — —'

分类页面获取当前分类的ID函数:(或许函数写的不怎么样,高手请指教纠正)

function single_term_id_by_zww( $prefix = '', $display = true ) {
	global $wp_query;
	$term = $wp_query->get_queried_object();
	if ( !$term )
		return;
	if ( is_category() )
		$term_id = apply_filters( 'single_cat_title', $term->term_id );
	elseif ( is_tag() )
		$term_id = apply_filters( 'single_tag_title', $term->term_id );
	elseif ( is_tax() )
		$term_id = apply_filters( 'single_term_title', $term->term_id );
	else
		return;
	if ( empty( $term_id ) )
		return;
	if ( $display )
		echo $prefix . $term_id;
	else
		return $term_id;
} 

使用方法跟“single_cat_title()”函数类似:

<?php single_term_id_by_zww('前缀', 显示否); ?>

上面的代码就变成如下:

$cat_id = single_term_id_by_zww('', false);
$categorys=split(',',get_category_parents($cat_id, false, ',')); //这步好像多余,没测试了
$cat_id = get_cat_ID($categorys[1]);
wp_list_categories( 'title_li=&style=none&child_of='.$cat_id);

折腾完,收工,玩游戏。

zww
or
oooo

“WordPress函数: 分类页面获取当前分类的ID”有55条评论

  1. 林木木 says:

    变态的需求产生了变态的自定义函数!~

    1. 万戈 says:

      @林木木
      变态的自定义函数产生了变态的ZWW大叔!~

    2. gsid says:

      @万戈
      变态的ZWW大叔产生了变态的需求!~

    3. 阿鼎 says:

      @gsid
      因为这些变态,以至于现在都不知道说什么!~

    4. 阿鼎 says:

      @林木木
      不是骂人的话!发之前没注意,呵呵! :mrgreen:

    5. zwwooooo says:

      @林木木
      嗯嗯,相当变态

    6. zwwooooo says:

      @万戈
      人不变态很难生存

  2. jiechic says:

    看不懂的我,只能mark一下

    1. zwwooooo says:

      @jiechic
      一般很难需要

  3. 阿修 says:

    很久没吃方便面了~~

    1. zwwooooo says:

      @阿修
      我也很久+很少

  4. 有没有七宝一丁牌

    1. zwwooooo says:

      @软件盒子
      对方便面没什么研究了

  5. 邓肯 says:

    看不懂 一晃而过

    1. zwwooooo says:

      @邓肯
      哈哈,那就“谢晃”

  6. wmtimes says:

    不过这个应该很有用。先收藏了。

    1. zwwooooo says:

      @wmtimes
      其实这个函数可以变很多种

  7. SErHo says:

    我在想你写这篇文章时是不是正在吃方便面。 :mrgreen:

    1. zwwooooo says:

      @SErHo
      我很久不需要了,有LP还吃fbm就囧了

  8. zrqx008 says:

    面>方便面>不是面>统一>算了,还是康师傅>好吧,我要来一桶

  9. 来学习大神们的教程

    1. zwwooooo says:

      @混乱博客
      只是普通的折腾者,不是神

  10. smilebull says:

    这个需求还真不是一般人能有的,O(∩_∩)O哈哈~

    1. zwwooooo says:

      @smilebull
      对啊,属于稀少变态型

  11. 韩国 says:

    网页制作啊!

  12. smilebull says:

    发现你的首字下沉在FF下杯具了 :evil:

    1. zwwooooo says:

      @smilebull
      对,一直没去解决

  13. liveme says:

    呢呢呢,这个还真不是一般的蛋疼啊,看了一遍,晕忽忽的 :???: :???: 看来非不到自己需要用到的时候,是不会那么轻易理解的。

    1. zwwooooo says:

      @liveme
      哈哈,的确如此,所以我用大家都需要经历的方便面来做例子

  14. 水水 says:

    能不能给出个demo页面?

    1. zwwooooo says:

      @水水
      不需要,需要的看看就知道了

    2. 水水 says:

      @zwwooooo
      诱惑一下不懂的我吧

    3. zwwooooo says:

      @水水
      呵呵,这又不是有什么好处的

  15. A.shun says:

    这个需求。。。一般人都不可能想到诶

    1. zwwooooo says:

      @A.shun
      是啊,其实是一些人不太懂变通

  16. socekin says:

    这个~呃 我应该不会用到 更不可能想到

    1. zwwooooo says:

      @socekin
      哈哈,要是我就换种方式,但对方一定要实现这个……

  17. 卢松松 says:

    还是wp可扩展性强哈

    1. zwwooooo says:

      @卢松松
      这也是wp的成功之处

  18. yixin says:

    这个以后或许有用,留作参考

    1. zwwooooo says:

      @yixin
      应该比较少,但可以作为函数参考,然后变换

  19. 我现在看你这里连百度广告都变成“非油炸方便面机”

    1. zwwooooo says:

      @闲云野鹤
      百度的匹配真“厉害”

  20. 我不在乎 says:

    这个问题应该很常见吧?wordpress全球那么多人用就没人提过?

    1. zwwooooo says:

      @我不在乎
      这个就不知道了,起码随便一搜是搜不到的。

发表评论

昵称 *

网址

B em del U Link Code Quote