Jekyll中如何按对象子字段排序数组,字段缺失时使用默认值?
Jekyll文章按自定义修改日期排序方案
首先纠正一个认知误区:Liquid 的sort过滤器本身就支持对象数组按指定属性排序,并非仅能处理字符串数组。你可以通过以下步骤实现需求:
- 统一排序基准字段:先给所有文章添加统一的排序用临时字段,存在
date-edit时优先用该值,不存在则默认使用date - 按统一字段对文章数组排序
完整实现代码
<!-- 先处理所有文章的排序基准字段 --> {% assign processed_posts = "" | split: "" %} {% for post in site.posts %} {% assign post_sort_date = post.date-edit | default: post.date %} {% assign current_post = post %} {% assign current_post.sort_date = post_sort_date %} {% assign processed_posts = processed_posts | push: current_post %} {% endfor %} <!-- 按sort_date排序,需要最新内容在前就保留reverse过滤器,不需要则删除 --> {% assign sorted_posts = processed_posts | sort: "sort_date" | reverse %} <!-- 遍历输出排序后的文章列表 --> {% for post in sorted_posts %} <!-- 此处替换为你自己的文章列表渲染逻辑 --> <h3><a href="{{ post.url }}">{{ post.title }}</a></h3> <p>发布时间:{{ post.date | date: "%Y-%m-%d" }} {% if post.date-edit %} | 最后编辑:{{ post.date-edit | date: "%Y-%m-%d" }}{% endif %}</p> {% endfor %}
注意事项
- 文章前置元数据中
date-edit的格式需要和内置date格式保持一致,推荐使用YYYY-MM-DD HH:MM:SS +时区的标准格式,避免排序逻辑异常 - 以上写法兼容所有主流Jekyll版本,无需额外安装插件
内容的提问来源于stack exchange,提问作者Ky -
相关产品推荐
相关产品推荐

