wp_list_categories 函数描述
乍一看函数名,还以为只能列出默认分类目录下面的分类项目呢?深入研究了一下才知道,原来这个函数也是可以列出所有自定义分类法下面的分类项目的。这个函数的作用是根据指定的条件,列出某个分类法下面所有的分类项目的分类链接。
注意: wp_list_categories() 和 WordPress 2.1 中的 list_cats() 与 wp_list_cats() 函数的作用是一样的(这两个函数都已经被弃用了,不提也罢)。如果需要列出未经格式化的分类目录项,请使用 get_categories() 函数。
使用方法
默认使用
'', //(字符串)是否显示到所有分类的链接,默认为空,不显示 'orderby' => 'name', //(字符串)排序依据,可以用分类名称,分类ID,或者分类文章数排序,可用的值有:ID,name(默认),slug,count,term_group 'order' => 'ASC', //(字符串)排序方式,正序或倒序,可用的值有:ASC,DESC 'style' => 'list', //(字符串)列表或无列表,可用的值有:list(默认),none 'show_count' => 0, //(布尔值)是否显示分类里面文章数量的开关,默认为不显示 'hide_empty' => 1, //(布尔值)是否显示空分类--没有文章的分类显示出来也是404页面,还不如隐藏了,所以默认为隐藏 'use_desc_for_title' => 1, //(布尔值)默认以分类描述作为分类链接的title属性,显示出来对SEO优化和用户体验提高是有帮助的,默认为显示 'child_of' => 0, //(布尔值)只显示指定分类的自分类,这算是一个小功能,默认为假 'feed' => '', //(字符串)是否显示一个分类rss2订阅源的文字,默认为空,看需要 'feed_type' => '', // (字符串)订阅源的类型 'feed_image' => '', // (字符串)显示一个表示订阅源的小图标。此参数覆盖feed参数的值 'exclude' => '', // (字符串)从结果中排序某些分类,值为以逗号分隔的分类项ID,不能和include同时使用 'exclude_tree' => '', // (字符串)和上面的exclude作用一样,不同的是,这个排除的是有子分类的分类项 'include' => '', // (字符串)结果中只包含某些分类项 'hierarchical' => 1, // (布尔值)是否分层显示父级分类和子分类 'title_li' => __( 'Categories' ), //(字符串)分类列表的标题,默认为分类目录,可根据需要设置 'show_option_none' => __('No categories') ,//(字符串)没有分类的情况下显示的问题 'number' => null, //(整数),显示分类项的数量,如果分类特别多,全部显示出来会很慢,限制个数量是有必要的
'echo' => 1, // (布尔值)是否显示出来,控制直接显示列表,还是保存在某个变量中 'depth' => 0, // (整数) 是否分层显示列表,默认为0,分层显示所有分类和自分类,-1为不分层显示所有分类,1为只显示顶级分类,n为显示n级分类 'current_category' => 0, // (字符串)当前分类项,设置某项为当前分类项 'pad_counts' => 0, // (布尔值)通过自分类里的项目计算链接或文章数 'taxonomy' => 'category', //(字符串)显示某个自定义分类法下面的分类项目 'walker' => null //(对象),生成列表所用的类 ); ?>
使用示例
包含或排除分类
通过分类名排序,包含 ID 为 16, 3, 9, 5 的分类项,我们可以这样做:
下面的代码演示了显示通过名称排序,显示分类里的文章数量,并且排序 ID 为 10 的分类的方法:
显示或隐藏分类列表标题
不想显示分类列表的标题其实很简单,只需要把 title_li 参数的值留空就可以了,如下:
下面,我们只显示 ID 为 9, 5, 23 的分类,并设置分类列表的标题为 H2 包裹 Poetry:
-
' . __('Poetry') . '' ); ?>
只显示某个分类的子分类
有时候,我们需要显示某个分类的自分类(在开发cms或商城站点的时候,这个需求很常见),只需要把父级分类的 ID 赋给 child_of 参数就可以了。
移除分类包括分类数的括号
如果设置了show_count=1, 每个分类后面会显示一个用括号括起来的分类数量,我们可以通过正则表达式替换的方式,去掉这个括号。
Categories'); $variable = preg_replace('~\((\d+)\)(?=\s*+<)~', '$1', $variable); echo $variable; ?>
显示带 RSS 链接的分类列表
对于经常更新的资讯类站点,RSS 不失为留住用户的一种好方式,设置 feed 参数的值为 RSS,就可以在分类列表后面显示一个 RSS 链接,非常实用。
如果嫌文字不够明显,用一个自定义 RSS 图标代替也是可以的,不过 RSS 图标的路径一定要弄对了。
显示自定义分类法中的分类项
WordPress 3.0 以后,wp_list_categories() 增加了自定义分类法的参数以便我们显示自定义分类法分类项列表,下面演示了怎么显示自定义分类法 genre 的分类项
$taxonomy, 'orderby' => $orderby, 'show_count' => $show_count, 'pad_counts' => $pad_counts, 'hierarchical' => $hierarchical, 'title_li' => $title ); ?>
显示某篇文章的分类
我们还可以通过父子分类关系显示某篇文章的分类,其实这个功能直接用 get_the_category_list() 实现更直接更方便,这里只是说明一下我们可以这样做,平时使用中,建议使用后者。下面的代码必须在 loop 中使用
ID, $taxonomy, array( 'fields' => 'ids' ) ); // 用逗号分隔不同的分类链接 $separator=", "; if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) { $term_ids = implode( ',' , $post_terms ); $terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=" . $term_ids ); $terms = rtrim( trim( str_replace( "
', $separator, $terms ) ), $separator ); // 显示分类链接 echo $terms; } ?>
分类列表的标记和样式
默认情况下,wp_list_categories 输出以“Categories”为标题的无需列表,我们可以用过下面的 CSS 选择器美化分类列表的样式:
li.categories { ... } /* 最外层 */ li.cat-item { ... } li.cat-item-7 { ... } /* 某个分类的 #7 */ li.current-cat { ... } li.current-cat-parent { ... } ul.children { ... }