自定义排序WordPress 分类目录
如何自定义排序WordPress 分类目录,非插件实现对WordPress分类目录的自定义排序,这似乎是一个很…
如何自定义排序WordPress 分类目录,非插件实现对WordPress分类目录的自定义排序,这似乎是一个很小的功能,但是更改需要花费很多时间。 如果选择插件,则可以使用:Category Order and Taxonomy Terms Order。 具体实现方案中的代码也从该插件中提取:
基本思路是在数据库中添加一个排序字段,然后在取值sql语句中按此字段排序,或者先取出数据,然后按此字段排序;
将排序字段添加到数据库
待修改表的名称为wp_terms,wp_是自定义表的前缀,可以根据实际情况进行搜索;
执行以下sql语句,只需将一个名为term_order的字段添加到wp_terms,tinyint类型,默认为0;
1 |
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;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public function widget($args, $instance){ $cat_args = array( |
此处的代码不能保证一定是只有目录组件用到了,但至少从现在的页面布局下,只有分类目录这个地方输出了 “orderby-000”;后台中的分类目录管理也没有输出;
2.在主题下的 functions.php 的最后,添加下面的代码:
1 2 3 4 5 6 7 8 9 10 11 |
function hook_get_terms_orderby($orderby, $args) if (isset($args[‘orderby’]) && $args[‘orderby’] == “term_order” && $orderby != “term_order”) return $orderby; |
这段代码加了一个 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 就可以;
排序功能到这里就完成了!!当然为了节省时间,建议小白用插件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!