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:

    我略过吧 我表示看不懂代码。。。 :oops:

    1. zwwooooo says:

      @球犯
      飘吧,哈。

  2. 嗯,飘走了。。 :mrgreen:

  3. Walt says:

    你好 single_tag_title()怎么为空?
    我的博客:www.waltfy.com

    1. zwwooooo says:

      @Walt
      ???不知道你要问啥,如果你要了解 single_cat_title 的话,去 WordPress Codex查询,只要直接搜索此函数即可。

  4. 被评论,镇住了

  5. LL.CX says:

    果然很变变

  6. 当前分类的话,直接用$cat就能取到分类ID。

  7. shinifei says:

    为何我一看到“折腾完,收工,玩游戏”就想到了LOL??

回复给 阿修 ¬
取消回复

昵称 *

网址

B em del U Link Code Quote