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

Hugo首页最新文章显示异常求助:位置错误或重复显示

Hugo自定义短代码显示文章重复/位置异常的解决方案

问题根源

你的问题大概率是主题模板内置了文章列表输出逻辑,和你自定义的短代码输出重复了。比如_index.md对应的列表模板(如layouts/index.html或layouts/_default/list.html)里,已经有循环输出文章的代码,导致要么模板的输出覆盖了短代码,要么两者同时输出造成重复。

解决步骤

1. 检查并修改主题列表模板

找到当前主题的列表模板文件(路径一般是themes/[你的主题名]/layouts/index.html或themes/[你的主题名]/layouts/_default/list.html),查找是否存在类似以下的代码段:

{{ range .Site.RegularPages.ByDate | first 5 }}
  <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
{{ end }}

如果有两种处理方式:

  • 直接删除这段代码,只保留你通过短代码输出的文章列表;
  • 给模板加个开关,通过页面前置元数据控制是否输出:
    在_index.md的前置区添加参数:
    ---
    title: 首页
    disable_default_posts: true
    ---
    
    然后修改模板代码:
    {{ if not .Params.disable_default_posts }}
      {{ range .Site.RegularPages.ByDate | first 5 }}
        <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
      {{ end }}
    {{ end }}
    

2. 修正短代码结构

确保你的短代码文件(layouts/shortcodes/post.html)结构完整,避免和页面其他内容冲突:

<ul class="latest-posts">
  {{ range .Site.RegularPages.ByDate | first 5 }}
    <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
  {{ end }}
</ul>

用<ul>包裹列表项,避免样式混乱,同时确认短代码调用用{{< post >}}(输出纯HTML),不要用{{% post %}}(会解析Markdown)。

3. 调整模板渲染逻辑

如果主题模板是先渲染_index.md内容再追加默认文章列表,那你需要修改模板,把默认的文章列表逻辑移除,或者替换成短代码的调用。比如在模板中直接调用短代码,而不是写循环:

{{< post >}}

这样就不用在_index.md里重复调用了,位置也能完全由模板控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:35:36