You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Jekyll按修改日期而非发布日期排序文章?

解决Jekyll按最后修改日期自动排序的问题

我懂你的困扰——手动加last_modified_at字段后插件就“罢工”了,这是因为插件的默认逻辑是优先使用你手动设置的字段值,不会再去读取文件的修改时间自动更新它。下面给你一套完全自动化的解决方案,再也不用手动维护这个字段:

步骤1:正确配置插件(无需手动添加字段)

首先确保你已经正确安装并启用了jekyll-last-modified-at,但绝对不要在任何文章的前置信息里写last_modified_at。插件会自动读取每篇文章文件的系统修改时间(mtime),并给对应的post对象自动添加上last_modified_at属性,完全不需要你手动干预。

检查你的配置:

  • 在Gemfile中确认包含:
    gem 'jekyll-last-modified-at'
    
  • 在_config.yml中启用插件:
    plugins:
      - jekyll-last-modified-at
    

步骤2:用自动生成的字段排序

直接使用你之前的排序代码即可,现在插件已经自动给每篇文章生成了last_modified_at值:

{% assign sorted_posts = site.posts | sort: "last_modified_at" | reverse %}
{% for post in sorted_posts %}
  <!-- 你的文章渲染代码 -->
{% endfor %}

现在每次你保存文章(按Ctrl+S),文件的mtime会更新,插件就会自动同步这个值到last_modified_at属性里,排序也会自动跟着更新。

特殊情况处理:手动指定部分文章的修改日期

如果你有一些特殊文章(比如迁移过来的旧文,文件mtime不准确),不想用系统修改时间,可以用一个自定义字段(比如manual_modified_at),然后修改排序逻辑优先使用这个字段:

{% assign sorted_posts = site.posts | sort: "manual_modified_at", "last_modified_at" | reverse %}

这样,有manual_modified_at的文章会用你指定的日期排序,没有的就用插件自动生成的最后修改时间,完美兼顾自动化和灵活性。

清理之前的手动字段

如果你之前已经给很多文章加了last_modified_at字段,可以用编辑器的全局替换功能批量删除:比如在VS Code里用全局查找last_modified_at:.*,然后替换为空,一次性搞定所有文章的手动字段。

内容的提问来源于stack exchange,提问作者Fraktar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:51