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

Jekyll站点如何获取所有页面自定义topic元数据的取值列表

Jekyll 全站topic元数据取值列表实现方案

无插件方案(兼容GitHub Pages)

直接在Liquid模板中遍历全站所有内容,收集topic值后去重即可,无需额外配置,适合用GitHub Pages托管站点的场景。

示例代码如下:

{% comment %} 初始化空数组存储所有topic {% endcomment %}
{% assign all_topics = "" | split: "" %}

{% comment %} 遍历所有文章提取topic {% endcomment %}
{% for post in site.posts %}
  {% if post.topic and post.topic != "" %}
    {% assign all_topics = all_topics | push: post.topic %}
  {% endif %}
{% endfor %}

{% comment %} 遍历所有自定义页面提取topic {% endcomment %}
{% for page in site.pages %}
  {% if page.topic and page.topic != "" %}
    {% assign all_topics = all_topics | push: page.topic %}
  {% endif %}
{% endfor %}

{% comment %} 如果用到了自定义集合,补充对应遍历逻辑即可,示例为名为docs的集合 {% endcomment %}
{% for doc in site.docs %}
  {% if doc.topic and doc.topic != "" %}
    {% assign all_topics = all_topics | push: doc.topic %}
  {% endif %}
{% endfor %}

{% comment %} 去重并排序,得到最终不重复的topic列表 {% endcomment %}
{% assign unique_topics = all_topics | uniq | sort %}

拿到unique_topics数组后直接遍历即可做分类展示:

{% for topic in unique_topics %}
  <h2>{{ topic }}</h2>
  <!-- 此处插入你已实现的、对应topic的页面筛选逻辑 -->
{% endfor %}

插件方案(仅支持自行构建Jekyll站点的场景)

如果站点是自行构建部署、支持自定义插件,可以把topic收集逻辑封装为插件,直接在全局变量中调用,无需在模板中重复写遍历逻辑。

  1. 在站点根目录新建_plugins/topics_generator.rb文件,写入以下代码:
Jekyll::Hooks.register :site, :post_read do |site|
  all_topics = []
  # 自动遍历所有内容类型(文章、页面、自定义集合)收集topic
  [site.posts.docs, site.pages, site.collections.values.map(&:docs).flatten].flatten.each do |item|
    next unless item.data['topic'] && !item.data['topic'].empty?
    all_topics << item.data['topic']
  end
  # 去重排序后存入site全局配置
  site.config['all_topics'] = all_topics.uniq.sort
end
  1. 模板中直接调用全局变量即可:
{% for topic in site.all_topics %}
  <!-- 分类展示逻辑 -->
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:09:01