乍一看函数名,还以为只能列出默认分类目录下面的分类项目呢?深入研究了一下才知道,原来这个函数也是可以列出所有自定义分类法下面的分类项目的。这个函数的作用是根据指定的条件,列出某个分类法下面所有的分类项目的分类链接。
使用方法
<?php wp_list_categories( $args ); ?>
默认使用
<?php $args = array( 'show_option_all' => '', //(字符串)是否显示到所有分类的链接,默认为空,不显示 '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 的分类项,我们可以这样做:
<ul>
<?php wp_list_categories('orderby=name&include=3,5,9,16'); ?>
</ul>
下面的代码演示了显示通过名称排序,显示分类里的文章数量,并且排序 ID 为 10 的分类的方法:
<ul>
<?php wp_list_categories('orderby=name&show_count=1&exclude=10'); ?>
</ul>
显示或隐藏分类列表标题
不想显示分类列表的标题其实很简单,只需要把 title_li 参数的值留空就可以了,如下:
<ul>
<?php wp_list_categories('exclude=4,7&title_li='); ?>
</ul>
下面,我们只显示 ID 为 9, 5, 23 的分类,并设置分类列表的标题为 H2 包裹 Poetry:
<ul>
<?php wp_list_categories('include=5,9,23&title_li=<h2>' . __('Poetry') . '</h2>' ); ?>
</ul>
只显示某个分类的子分类
有时候,我们需要显示某个分类的自分类(在开发cms或商城站点的时候,这个需求很常见),只需要把父级分类的 ID 赋给 child_of 参数就可以了。
<ul>
<?php wp_list_categories('orderby=id&show_count=1&use_desc_for_title=0&child_of=8'); ?>
</ul>
移除分类包括分类数的括号
如果设置了show_count=1, 每个分类后面会显示一个用括号括起来的分类数量,我们可以通过正则表达式替换的方式,去掉这个括号。
<?php
$variable = wp_list_categories('echo=0&show_count=1&title_li=<h2>Categories</h2>');
$variable = preg_replace('~\((\d+)\)(?=\s*+<)~', '$1', $variable);
echo $variable;
?>
显示带 RSS 链接的分类列表
对于经常更新的资讯类站点,RSS 不失为留住用户的一种好方式,设置 feed 参数的值为 RSS,就可以在分类列表后面显示一个 RSS 链接,非常实用。
<ul>
<?php wp_list_categories('orderby=name&show_count=1&feed=RSS'); ?>
</ul>
如果嫌文字不够明显,用一个自定义 RSS 图标代替也是可以的,不过 RSS 图标的路径一定要弄对了。
<ul>
<?php wp_list_categories('orderby=name&show_count=1&feed_image=/images/rss.gif'); ?>
</ul>
显示自定义分类法中的分类项
WordPress 3.0 以后,wp_list_categories() 增加了自定义分类法的参数以便我们显示自定义分类法分类项列表,下面演示了怎么显示自定义分类法 genre 的分类项
<?php
$taxonomy = 'genre';
$orderby = 'name';
$show_count = 0; // 1 为是, 0 为否
$pad_counts = 0; // 1 为是, 0 为否
$hierarchical = 1; // 1 为是, 0 为否
$title = '';
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title
);
?>
<ul>
<?php wp_list_categories( $args ); ?>
</ul>
显示某篇文章的分类
我们还可以通过父子分类关系显示某篇文章的分类,其实这个功能直接用 get_the_category_list() 实现更直接更方便,这里只是说明一下我们可以这样做,平时使用中,建议使用后者。下面的代码必须在 loop 中使用
<?php
$taxonomy = 'category';
// 获取某篇文章的分类id
$post_terms = wp_get_object_terms( $post->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( '<br />', $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 { ... }