这个功能不是一般的蛋疼,这是我做主题以来最变态的需求。情况是这样的:(举例来说吧,例子很变态,要有心理准备)
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);
折腾完,收工,玩游戏。
- 本文标题:WordPress函数: 分类页面获取当前分类的ID
- 本文链接:https://zww.me/archives/25399
- 发布时间:2011年03月07日 10:18
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
我略过吧 我表示看不懂代码。。。
@球犯
飘吧,哈。
嗯,飘走了。。
你好 single_tag_title()怎么为空?
我的博客:www.waltfy.com
@Walt
???不知道你要问啥,如果你要了解 single_cat_title 的话,去 WordPress Codex查询,只要直接搜索此函数即可。
被评论,镇住了
果然很变变
当前分类的话,直接用$cat就能取到分类ID。
为何我一看到“折腾完,收工,玩游戏”就想到了LOL??