服务器与VPS
促销优惠信息

建站技巧:如何让wordpress分类目录自定义排序

查看目录
文章目录隐藏
  1. 一、给分类目录加数字:
  2. 二、插件实现分类目录自定义排序
  3. 三、纯代码实现wordpress分类目录排序

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 插件不仅可以自定义分类排序,也能对标签进行自定义排序,后台直接拖动就可以实现排序。

建站技巧:如何让wordpress分类目录自定义排序

类似的插件还有很多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文章自定义排序的话,可以参考下面的教程:

建站技巧:如何让wordpress文章根据更新时间排序

发布时间:     阅读(93)

楚狂人 » 建站技巧:如何让wordpress分类目录自定义排序

相关推荐

  • 暂无文章

评论 抢沙发

  • (必填)
  • (必填)

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏