wp_list_categories函数的作用是调用wordpress博客分类。它丰富而实用的参数,可让你轻松获得想要的效果。操作简单,功能强大,掌握这个函数,对wordpress主题制作有很大帮助,是wordpress主题制作必须熟知的函数之一。
wp_list_categories函数存放位置在wp-includes文件夹的category-template.php文件。可以在第452行找到,420行至450行是函数使用说明。此外,还可以参考官方wp_list_categories链接,里面介绍的很详尽。
作用:按条件获取分类目录并按参数格式化
用法
<?php
wp_list_categories($args);
$args=array(
'show_option_all'=>'',//是否列出分类链接
'orderby'=>'name',//按名称排列
'order'=>'ASC',//升、降序
'style'=>'list',//是否用列表(ul>li)
'show_count'=>0,//是否显示文章数量
'hide_empty'=>1,//是否显示无日志分类
'use_desc_for_title'=>1,//是否显示分类描述
'child_of'=>0,//是否限制子分类
'feed'=>'',//是否显示rss
'feed_type'=>'',//rss类型
'feed_image'=>'',//是否显示rss图片
'exclude'=>'',//排除分类的ID,多个用',(英文逗号)'分隔
'exclude_tree'=>'',//排除分类树,即父分类及其下的子分类
'include'=>'',//包括的分类
'hierarchical'=>true,//是否将子、父分类分级
'title_li'=> __('Categories'),//列表标题的名称
'show_option_none'=> __('No categories'),//无分类时显示的标题
'number'=>null,//显示分类的数量
'echo'=>1,//是否显示,显示或者返回字符串
'depth'=>0,//层级限制
'current_category'=>0,//添加一个没有的分类
'pad_counts'=>0,//这个我也不明白
'taxonomy'=>'category',//使用的分类法
'walker'=>null//用于显示的类(很复杂的概念)
?>
使用实例
显示包括ID为3,5,9,16的分类链接,且按名称排列顺序
<ul>
<?php wp_list_categories('orderby=name&include=3,5,9,16');?>
</ul>
显示Poetry为标题的包括ID为5,9,23的分类列表
<ul>
<?php wp_list_categories('include=5,9,23&title_li=<h2>'. __('Poetry').'</h2>');?>
</ul>
当然你也可以像如下这样书写参数,将参数整合为数组。
<?php
$taxonomy='genre';
$orderby='name';
$show_count=0;// 1 for yes, 0 for no
$pad_counts=0;// 1 for yes, 0 for no
$hierarchical=1;// 1 for yes, 0 for no
$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>
taxonomy分类法,是相对于标签(tag)的概念。
主题中最常用的实例(获取所有分类目录,并按名字排序,获取深度为3,标题格式化为无):
这个实例常用于下拉菜单中,需要相关CSS和js支持,如果没有css,将会出现格式问题,如所有子目录堆叠而不是下拉,但是功能没问题。
<ul id=”nav”>
<li><a href=”<?php echo get_settings(‘home’); ?>/” title=”<?php bloginfo(‘description’); ?>”>Home</a></li>
<?php wp_list_categories(‘sort_column=name&title_li=&depth=3′); ?>
</ul>
按照分类名排序,并只显示 ID 为1、2、3和4的分类:
< ?php wp_list_categories(‘orderby=name&include=1,2,3,4′); ?>
按照分类名排序,并显示每个分类的日志数,但不显示 ID 为10的分类
< ?php wp_list_categories(‘orderby=name&show_count=1&exclude=10′); ?>
显示或隐藏列表标题
title_li这个参数用于显示或者隐藏分类列表的标题,它的默认值为’(__(‘Categories’)',即显示分类列表的标题,如果不设置或设置为空,它将什么也不显示。下面的例子将不显示id为4和7的分类,并不显示list_categories列表的标题:
< ?php wp_list_categories(‘exclude=4,7&title_li=’); ?>
接下来的例子是仅仅只显示 ID为5、9和23的分类,并且列表标题显示为“Poetry”表:
< ?php wp_list_categories(‘include=5,9,23&title_li=‘ . __(‘Poetry’) . ” ); ?>
仅显示某个分类下的子分类
下面的示例代码生成了 ID 为8的父分类下的子分类根据其 ID 进行排序的链接列表,它会显示每个分类下的文章数,并且隐藏链接的 title 标签中的分类描述,注意:如果父分类下没有任何文章,那么父分类将不会显示(读起来貌似很难理解,不过照着做就理解了)
< ?php wp_list_categories(‘orderby=id&show_count=1&use_desc_for_title=0&child_of=8′); ?>
显示带有 RSS Feed 链接的分类列表
面代码根据分类名对分类列表排序,并显示每个分类下的文章数和 RSS 的 Feed 链接:
< ?php wp_list_categories(‘orderby=name&show_count=1&feed=RSS’); ?>
还可以使用 RSS 图标代替 RSS 链接
< ?php wp_list_categories(‘orderby=name&show_count=1&feed_image=/images/rss.gif’); ?>
参数使用说明
show_option_all:String类型。用于在分类列表前加入一个自定义链接。以String字符串作为链接文字,链接的地址指向首页。它同博客分类链接没关系。如果我想在分类列表的头部加入“首页”,并链接到首页,可以使用下面语句:
<?php wp_list_categories('show_option_all='.esc_attr(__('Home')).''); ?>
show_option_none:String类型。用于博客没有分类时显示,默认为“暂无分类”。在没有分类时,想显示链接到首页,可以这样调用:
<?php wp_list_categories('show_option_none='.esc_attr(__('Home')).''); ?>
orderby:分类以何种方式排列,支持ID、name、slug、count 、term_group方式,默认name。ID是分类建立的顺序排列,name分类名称排列,slug缩略名方式排列,count分类日志数量排列,term_group分组方式排列(二级或多级分类时使用)。想理解的更清楚,那就一行一个,读取出来自己研究吧?
<?php wp_list_categories('orderby=ID'); ?>
<?php wp_list_categories('orderby=name'); ?>
<?php wp_list_categories('orderby=slug'); ?>
<?php wp_list_categories('orderby=count'); ?>
<?php wp_list_categories('orderby=term_group'); ?>
order:分类的排序方式,可以使用正序ASC(默认)、倒序DESC两种方式。比如我以我建立分类的先后顺序,也就是以ID方式排列,我想让先建的在前面用ASC;我想让后建的在前面用DESC。请自行区别第一行和第二行。
<?php wp_list_categories('orderby=ID'); ?>
<?php wp_list_categories('orderby=ID&order=ASC'); ?>
<?php wp_list_categories('orderby=ID&order=DESC'); ?>
show_last_update:是否显示分类中日志的最新时间戳。1为显示,0为不显示(默认)。测试代码:
<?php wp_list_categories('show_last_update=0'); ?>
<?php wp_list_categories('show_last_update=1'); ?>
style:分类显示方式,有两参数list(默认)、none。用none时需配合show_option_all,单独使用是没有效果的。此时每个分类之间用<br>分割,源代码里看变化。
<?php wp_list_categories('style=none&show_option_all='.esc_attr(__('Home')).''); ?>
<?php wp_list_categories('show_option_all='.esc_attr(__('Home')).''); ?>
show_count:是否显示分类下的日志数量,0 为不显示 1为显示,默认为0不显示。
<?php wp_list_categories('show_count=1'); ?>
<?php wp_list_categories('show_count=0'); ?>
hide_empty:是否隐藏无文章的分类。0为不隐藏,1为隐藏,默认为1隐藏。当初不得言建博客分类时,在前台刷新却显示不出,还以为出现Bugs了。后来无意中发现,只要分类下有了内容,就可以显示了,也就放弃了深究,渐渐淡忘了。直到现在才清楚,默认下不显示无内容的分类。新建一个分类测试吧。
<?php wp_list_categories('hide_empty=1'); ?>
<?php wp_list_categories('hide_empty=0'); ?>
use_desc_for_title:是否显示分类链接中 title 标签描述。0为不显示,1为显示,默认值0不显示。值为1,在分类链接源码里的title内容,为建分类时的描述文字;值为0,在分类链接源码里的Title内容变为“查看分类名称下的所有日志”。
<?php wp_list_categories('use_desc_for_title=1'); ?>
<?php wp_list_categories('use_desc_for_title=0'); ?>
child_of:数字类型,显示指定ID下的子分类。如果使用则需要把hide_empty赋值为0。
feed:是否显示一个链接到当前分类的Feed订阅,值作为内容出现,默认不显示。当feed赋值RSS时,将在当前分类后面加上名为RSS的Feed链接。另外,由下面的测试可知,虽然此参数没有默认值,但当feed=0时等同默认。
<?php wp_list_categories('feed=Rss'); ?>
<?php wp_list_categories('feed='); ?>
<?php wp_list_categories('feed=0'); ?>
feed_type:此参数暂不知如何使用。
feed_image:设置Feed的图片地址,同feed参数类似,只是把文字替换成图片显示。把参数feed和feed_image联合使用,会有意想不到的效果。请注意图片必须存在哈。
<?php wp_list_categories('feed_image=/images/budeyan.gif'); ?>
<?php wp_list_categories('feed=RSS&feed_image=/images/budeyan.gif'); ?>
exclude:字符串类型,使一个或多个分类不显示,每个分类ID之间用半角逗号隔开。例如:136为站长手札,137为网络安全。下面是三者之间的对比,这样可以自定义不需要显示的分类了。
<?php wp_list_categories('exclude='); ?>
<?php wp_list_categories('exclude=136'); ?>
<?php wp_list_categories('exclude=136,137'); ?>
exclude_tree:不在分类列表中显示该分类树。
current_category:数字型,后跟分类ID号,对此ID分类加入名为current-cat的CSS控制,用户自定义current-cat样式后,可用于突出显示。应用?好吧,我可以定义current-cat为红色加粗,于是分类导航里就有了突出的显示了。注意:只能指定一个当前分类。变化需要在源代码中查看。
<?php wp_list_categories('current_category='); ?>
<?php wp_list_categories('current_category=136'); ?>
hierarchical:分层显示父/子分类。默认值为1,
<?php wp_list_categories('hierarchical=1'); ?>
<?php wp_list_categories('hierarchical=0'); ?>
title_li:自定义分类的标题内容。默认情况下,在分类显示的左侧还会有个标题“分类”,我想自己定义此分类标题名称,则需要用到此参数。想把分类标题删除不用?好吧赋值为空即可。第一个则不会有分类标题了,而第二个则把分类标题定义为:不得言博客分类,用<h2></h2>包含,便于定义样式。
<?php wp_list_categories('title_li='); ?>
<?php wp_list_categories('title_li=<h2>WPYOU博客分类</h2>' ); ?>
echo:是否显示分类。0表示不显示,1表示显示,默认为1。不得言这里就看不懂了,这个参数什么时候用的着?不想显示的话,删除代码得了,调用函数还不显示,想不通啊。
<?php wp_list_categories('echo=0'); ?>
<?php wp_list_categories('echo=1'); ?>
depth:分类显示深度。这里是针对含有子分类而言的。0表示以目录树方式显示父分类和子分类,-1以无缩进的方式显示所有分类;1表示只显示顶级父分类;数字n表示显示N层的分类。
<?php wp_list_categories('depth=-1'); ?>
<?php wp_list_categories('depth=0'); ?>
<?php wp_list_categories('depth=1'); ?>
<?php wp_list_categories('depth=3'); ?>
taxonomy:默认值category,除此之外,不知道啥用。
以上就是wp_list_categories函数的详细参数介绍了,根据自己的网站开发需求选择配置自己的参数进行不同显示效果和功能的设置。
主题中最常用的实例(获取所有分类目录,并按名字排序,获取深度为3,标题格式化为无):
这个实例常用于下拉菜单中,需要相关css和js支持,如果没有css,将会出现格式问题,如所有子目录堆叠而不是下拉,但是功能没问题。
<ul id=”nav”>
<li><a href=”<?php echo get_settings(‘home’); ?>/” title=”<?php bloginfo(‘description’); ?>”>Home</a></li>
<?php wp_list_categories(‘sort_column=name&title_li=&depth=3′); ?>
</ul>
按照分类名排序,并只显示 ID 为1、2、3和4的分类:
< ?php wp_list_categories(‘orderby=name&include=1,2,3,4′); ?>
按照分类名排序,并显示每个分类的日志数,但不显示 ID 为10的分类
< ?php wp_list_categories(‘orderby=name&show_count=1&exclude=10′); ?>
显示或隐藏列表标题
title_li这个参数用于显示或者隐藏分类列表的标题,它的默认值为’(__(‘Categories’)',即显示分类列表的标题,如果不设置或设置为空,它将什么也不显示。下面的例子将不显示id为4和7的分类,并不显示list_categories列表的标题:
< ?php wp_list_categories(‘exclude=4,7&title_li=’); ?>
接下来的例子是仅仅只显示 ID为5、9和23的分类,并且列表标题显示为“Poetry”表:
< ?php wp_list_categories(‘include=5,9,23&title_li=’ . __(‘Poetry’) . ” ); ?>
仅显示某个分类下的子分类
下面的示例代码生成了 ID 为8的父分类下的子分类根据其 ID 进行排序的链接列表,它会显示每个分类下的文章数,并且隐藏链接的 title 标签中的分类描述,注意:如果父分类下没有任何文章,那么父分类将不会显示(读起来貌似很难理解,不过照着做就理解了)
< ?php wp_list_categories(‘orderby=id&show_count=1&use_desc_for_title=0&child_of=8′); ?>
显示带有 RSS Feed 链接的分类列表
面代码根据分类名对分类列表排序,并显示每个分类下的文章数和 RSS 的 Feed 链接:
< ?php wp_list_categories(‘orderby=name&show_count=1&feed=RSS’); ?>
还可以使用 RSS 图标代替 RSS 链接
< ?php wp_list_categories(‘orderby=name&show_count=1&feed_image=/images/rss.gif’); ?>
2.其使用方法如下,首先调用callback函数。
<ol>
<?php wp_list_comments('callback=special_comment'); ?></ol>
然后再在functions.php里面定义special_comment()函数,如:
functionspecial_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
<div id="comment-<?php comment_ID(); ?>">
<div>
<?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?>
<?php printf(__('<cite>%s</cite>
<span>says:</span>'), get_comment_author_link()) ?>
</div>
<?php if ($comment->comment_approved == '0') : ?>
<em><?php _e('Your comment is awAIting moderation.') ?></em>
<br />
<?php endif; ?>
<div>
<a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>">
<?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a>
<?php edit_comment_link(__('(Edit)'),' ','') ?></div>
<?php comment_text() ?>
<div>
<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
</div>
</div>
<?php
}
注意,这个时候少了一个’< / li >‘标签,WP会根据实际判断决定是否自动补充此标签。
wp_list_comments() 函数定义在wp-includes/comment-template.php