WordPress 列出所有分类目录或自定义分类法分类项目:wp list categories

函数描述

乍一看函数名,还以为只能列出默认分类目录下面的分类项目呢?深入研究了一下才知道,原来这个函数也是可以列出所有自定义分类法下面的分类项目的。这个函数的作用是根据指定的条件,列出某个分类法下面所有的分类项目的分类链接。

注意: wp_list_categories() 和 WordPress 2.1中的 list_cats() 与wp_list_cats() 函数的作用是一样的(这两个函数都已经被弃用了,不提也罢)。

如果需要列出未经格式化的分类目录项,请使用get_categories()函数。

使用方法

<?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>

显示自定义分类法中的分类项

WordPress3.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 { ... }
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?