wordpress程序无疑是现在最受欢迎的CMS建站系统,其免费、开源、可商用的特点让wordpress成为个人博客自己建站、企业建站以及网络公司承担建站业务的最佳建站工具之一。但是这么优秀的程序也无法满足每一个客户的个性化需求,比如有的朋友问我:如何让wordpress分类目录自定义排序?
这,确实是一个好问题。因为WordPress 默认的分类排序仅支持使用 ID,使用数量(count),名称(name),别名(slug)等字段进行排序,但没有提供自定义分类的方法。所以,我们想要wordpress分类目录自定义排序,就需要自己动手改造了。有三种方法可惜考虑:
一、给分类目录加数字:
我们知道wordpress可以根据名称(name)排序了。那么我们每个分类目录前面加一个数字,然后修改原来的排序规则为名称,这样可以变相的实现自定义wordpress分类目录排序。
比如我想改变链接分类的排序,就可以给链接目录设置:1.分类测试,2.测试分类……
然后修改具体显示页面的代码:
'category_orderby' => 'name', 'category_order' => 'ASC',
第一行的意思,排序规则为名称。
第二行的意思,ASC代表正序,DESC代表逆序。
二、插件实现分类目录自定义排序
可以给wordpress分类自定义排序的插件还是很多的,比如:WP Term Order
WP Term Order 插件不仅可以自定义分类排序,也能对标签进行自定义排序,后台直接拖动就可以实现排序。
类似的插件还有很多Custom Taxonomy Order、Post Types Order、WP Sort Order、Simple Custom Post Order……,有一些甚至不止支持分类目录排序,还支持文章的自定义排序。
三、纯代码实现wordpress分类目录排序
修改数据库表
待修改表的名称为wp_terms,wp_是自定义表的前缀,可以根据实际情况进行搜索;
执行以下sql语句,只需将一个名为term_order的字段添加到wp_terms,tinyint类型,默认为0;
ALTER TABLE wp_terms ADD term_order TINYINT DEFAULT 0
字段的数据类型使用tinyint,值范围为0-255,目录一般创建不会太多,这个范围就足够了; 如果你担心,可以使用int或integer类型
自定义表前缀可以在根目录的wp-config中找到,此变量为$ table_prefix;。
wp-terms表主要用于放置分类目录和标签等数据。 修改顺序时,仅修改与分类目录有关的数据即可。
添加字段后,就可以修改顺序。 需要在顶部/前面显示的值较小;
修改取到数据的顺序
1、wp-includes/widgets/class-wp-widget-categories.php 中,排序字段由默认的 name 改为 term_order;
public function widget($args, $instance){ // …… 省略的其他代码 if ($title) { echo $args['before_title'] . $title . $args['after_title']; } $cat_args = array( 'orderby' => 'term_order', // name 改为 term_order 'show_count' => $c, 'hierarchical' => $h, ); echo 'orderby-000'; // …… 省略的其他代码 }
此处的代码不能保证一定是只有目录组件用到了,但至少从现在的页面布局下,只有分类目录这个地方输出了 “orderby-000”;后台中的分类目录管理也没有输出;
2.在主题下的 functions.php 的最后,添加下面的代码:
function hook_get_terms_orderby($orderby, $args) { if ( apply_filters('to/get_terms_orderby/ignore', FALSE, $orderby, $args) ) return $orderby; if (isset($args['orderby']) && $args['orderby'] == "term_order" && $orderby != "term_order") return "t.term_order"; return $orderby; } add_filter('get_terms_orderby', 'hook_get_terms_orderby', 1, 2);
这段代码加了一个 get_term_orderby 过滤器,对 sql 语句中的 orderby 进行重置;
这段代码的大体意思是如果 $args[‘orderby’] – 原始传过来的排序字段是 term_order,修改之后的 $orderby 不是 term_order,就重置为 t.term_order;
第二步中修改的两个地方是相关的,2.1 中的字段和 2.2 中的 if 判断,是一个值,所以也可以把 term_order 替换成表中的其他字段或自定义字符串都可以,只要两边统一就好;只要保证过滤器最终返回 t.term_order 就可以;本段内容来自:https://www.febdays.com/teach/1651.html
通过以上三种方法都可以让wordpress分类目录自定义排序,第一种相对简单,不过实现效果有限制;第二种最简单,但是装插件多了,有的站长不太喜欢;第三种最复杂,但是相对来说,网站负担小,具体要采取哪一种方式就看各位站长自己的选择了。另外楚狂人还有一个想法,其实我们像链接一样可以给分类添加一个评级,然后前台排序的时候按照级别进行排序,这个需要一定动手能力,有兴趣的小伙伴可以尝试一下。如果你只想让wordpress文章自定义排序的话,可以参考下面的教程:
发布时间: 阅读(153)