WordPress模板插件定制

您现在的位置是:首页 > WordPress教程WordPress教程

WordPress文章排序?这几招让你想咋排就咋排!

查看 WP集市 的更多文章WP集市 2025-08-21 【WordPress教程】 1807人已围观

写WordPress博客的同学都知道,默认文章列表排序就那老几样:按发布时间倒序(最新的在前面)、正序(最早的在前面),顶多再加个按标题字母排。但实际用起来哪够啊!比如你想把阅读量高的文章放前面,或者手动指定某几篇文章的顺序,这时候默认排序就歇菜了。今天咱就唠唠,WordPress文章排序到底有多少种玩法,小白也能看懂的那种。

先说说最简单的:后台直接改(适合懒人)

如果你只是想临时换个排序方式,比如某天想让读者先看到最早发的文章,不用写代码,后台直接改就行。

进WordPress后台,点「设置」→「阅读」,拉到最下面“文章排序”,默认是“最新文章优先”,你点一下改成“最早文章优先”,保存就完事。

不过这方法有个坑:只能改发布时间的正反序,想按评论数、阅读量排?没戏。所以这招仅限“临时救救急”,真要搞花活还得往下看。

中等需求:用插件(不用写代码,点点鼠标就行)

要是你嫌后台改太局限,但又怕碰代码,插件就是救星。推荐两个我常用的:

一个叫「Post Types Order」,装完启用,后台会多一个“排序”菜单,直接拖文章就能调整顺序,跟拖文件夹似的,贼直观。缺点是只能手动拖,文章多了能累死你——100篇文章拖到天荒地老。

另一个叫「Custom Post Type Order」,功能更全点,支持按自定义字段、评论数、阅读量排,还能设置“只在首页生效”“只在分类页生效”。比如你想让分类页的文章按评论数从多到少排,插件里找到对应分类,选“排序依据:评论数”“降序”,保存就行。

插件虽好,但有个小毛病:装多了占资源,而且有些插件设置项藏得深,找半天找不到。所以简单排序用插件,复杂的还得撸代码。

硬核玩家:代码自定义排序(想咋排咋排)

其实代码也没那么吓人,复制粘贴改改参数就行。WordPress有个叫pre_get_posts的钩子函数,专门用来改文章查询的条件,咱就用它来控制排序。

举个栗子:按评论数多少排

比如你想让首页文章按评论数从多到少排(评论多的在前面),打开主题的functions.php( Appearance → Theme Editor → 选functions.php),贴这段代码:

function custom_sort_by_comments($query) {
  // 先判断:是不是在前台?是不是主循环?不是就别瞎改
  if ( $query->is_home() && $query->is_main_query() && !is_admin() ) {
    $query->set('orderby', 'comment_count'); // 排序依据:评论数
    $query->set('order', 'DESC'); // 降序(从多到少)
  }
}
add_action('pre_get_posts', 'custom_sort_by_comments');

// 白话注释:
// 第一行:定义个函数,名字随便起,叫custom_sort_by_comments就行
// if条件:必须是前台(!is_admin())、主循环(is_main_query())、首页(is_home()),不然后台文章列表也跟着变,到时候你找文章都费劲,别问我咋知道的
// 然后告诉WP:排序依据是comment_count(评论数),顺序是DESC(降序)

再举个栗子:按自定义字段排(手动控制顺序)

有时候你想手动指定某篇文章的位置,比如“置顶”但又不想用WP自带的置顶(自带置顶只能置顶一篇)。这时候可以建个自定义字段,比如叫display_order,给文章赋值:想放第一就填1,第二填2,以此类推。

然后用代码按这个字段排序,还是在functions.php里加:

function custom_sort_by_custom_field($query) {
  if ( $query->is_archive() && $query->is_main_query() && !is_admin() ) { // 这次让分类页生效
    $query->set('meta_key', 'display_order'); // 告诉WP:咱要按display_order这个自定义字段排
    $query->set('orderby', 'meta_value_num'); // 按数字值排序(别用meta_value,会按字符串排,10会排在2前面)
    $query->set('order', 'ASC'); // 升序(1在前,2在后)
  }
}
add_action('pre_get_posts', 'custom_sort_by_custom_field');

// 重点:meta_value_num一定要用,不然10和2比,字符串排序会认为10比2小(因为第一个字符1 < 2),到时候顺序就乱了,踩过坑的举手!

注意事项(划重点!)

  1. pre_get_posts别全局用!一定要加条件判断(是不是前台、是不是主查询),不然后台列表、搜索结果都会受影响,到时候哭都来不及。
  2. 排序依据有很多种:date(发布时间)、title(标题)、modified(修改时间)、rand(随机),甚至author(作者ID),想按啥排,把orderby的值换成对应的就行。
  3. 插件和代码别混用!比如你用插件设了按评论数排,又用代码设了按自定义字段排,WP也懵圈,最后听谁的不一定。

总结一下

简单排序(时间正反序):后台直接改;
中等需求(评论数、阅读量):用插件(Post Types Order、Custom Post Type Order);
复杂需求(自定义字段、多条件排序):用pre_get_posts写几行代码。

其实真不难,代码都是现成的,改改orderby和条件判断就行。刚开始可能会出错,比如忘了加!is_admin()导致后台乱套,没关系,删了重写嘛。玩WordPress不就是折腾出来的?你说对吧~

(完)

Tags:

WordPress模板插件定制