wordpress知识库
网站首页 > 知识库 > wordpress知识 >

wp_list_categories函数使用详解

2018/11/03

wp_list_categories 是 WordPress 中一个用于显示分类目录列表的函数,很多wordpress插件也经常会用到这个函数,它可以用于在页面、侧边栏或模板中以列表形式展示分类目录。乍一看函数名,还以为只能列出默认分类目录下面的分类项目呢?深入研究了一下才知道,原来这个函数也是可以列出所有自定义分类法下面的分类项目的。这个函数的作用是根据指定的条件,列出某个分类法下面所有的分类项目的分类链接。

函数使用方法:

<?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为5,6的分类项,我们可以这样做:

<ul>
<?php wp_list_categories('orderby=name&include=5,6'); ?>
</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;
?>

分类列表的标记和样式

默认情况下,wp_list_categories 输出以“Categories”为标题的无需列表,我们可以用过下面的css选择器美化分类列表的样式:

li.categories { ... } /* 最外层 */
li.cat-item { ... }
li.cat-item-7 { ... } /* 某个分类的 #7 */
li.current-cat { ... }
li.current-cat-parent { ... }
ul.children { ... }