wordpress中可以很方便的排列页面顺序,但是对分类目录却没有任何的排序选项,再加上如果主题不支持自定义菜单就不能满足有时需要随意排序的要求。总结一下可用的方法。
1、使用自带函数wp_list_categories()的orderby参数
缺点:只能按固定规则,无法按随意顺序排列。
orderby
(字符串)以分类名称、分类ID或文章数量等为排列依据。有效值:
- ID
- name - 默认
- slug
- count
- term_group
order
(字符串)分类的排序顺序(升序或降序)。缺省为升序。有效值:
- ASC – 升序(默认)
- DESC - 降序
函数里还有很多其他的参数,功能很丰富。详细可搜索一下或者参考下面这篇文章:
http://www.wpdaxue.com/wp_list_categories.html
2、使用插件:My Category Order
缺点:很方便的在侧边栏调用,但是不能灵活的放在主导航栏上
- 安装My Category Order插件后,在“文章”下面就会多出一个“My Category Order” 链接,设置你期望的分类排序,直接拖动都可以。
- 如果在用widget来显示分类列表,用 “My Category Order” widget 替换标准的”Category” widget,就OK了
- 如果没有widget而是用代码调用分类列表,可以在要显示分类列表处使用如下代码:wp_list_categories('orderby=order&title_li=');
我这里在实际使用中在有的站点中可以按照自定的顺序排列,有的却不可以,暂时不清楚什么原因。。。
3、修改数据库和源文件,增加一个排序的字段
缺点:需要修改源文件,不方便后续程序升级
- 编辑wordpress数据库分类表(wp_terms)加入排序字段,如:displayorder(类型为int)。并输入排序的数值,数字越小排序越靠前。
- 打开wp-includes目录下taxonomy.php文件找到如下位置,共2处:
else if ( 'name' == $orderby )
$orderby = 't.name';
在后面加上
else if ( 'displayorder' == $orderby )
$orderby = 't.displayorder'; - 在模板需要显示列表的地方调用
<?php wp_list_categories('orderby=displayorder&exclude=66,71&title_li='); ?>
以上唯一完全实现随意排序的恐怕只有第三种方法了,也都各有利弊。