Old

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

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

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

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/archives/25399

55 comments

  1. 林木木 林木木 Google Chrome 11.0.686.3 Google Chrome 11.0.686.3 Windows 7 Windows 7

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

    沙发
  2. jiechic jiechic Chromium 10.0.648.127 Chromium 10.0.648.127 Ubuntu 10.10 Ubuntu 10.10

    看不懂的我,只能mark一下

    板凳
  3. 阿修 阿修 Google Chrome 9.0.597.19 Google Chrome 9.0.597.19 Windows 7 Windows 7

    很久没吃方便面了~~

    地板
  4. ......
  5. 球犯 球犯 Google Chrome 10.0.648.127 Google Chrome 10.0.648.127 Windows XP Windows XP

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

    21楼
  6. 手机元素 手机元素 Google Chrome 11.0.686.3 Google Chrome 11.0.686.3 Windows XP Windows XP

    嗯,飘走了。。 :mrgreen:

    22楼
  7. Walt Walt Firefox 14.0.1 Firefox 14.0.1 Windows XP Windows XP

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

    23楼
    • zwwooooo zwwooooo Firefox 15.0 Firefox 15.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  8. 发现互联网 发现互联网 Google Chrome 25.0.1364.172 Google Chrome 25.0.1364.172 Windows 7 Windows 7

    被评论,镇住了

    24楼
  9. LL.CX LL.CX Firefox 20.0 Firefox 20.0 Windows XP Windows XP

    果然很变变

    25楼
  10. Crazy Loong Crazy Loong Firefox 24.0 Firefox 24.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

    26楼
  11. shinifei shinifei Sogou Explorer Sogou Explorer Windows 8.1 x64 Edition Windows 8.1 x64 Edition

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

    27楼

Leave a Reply