Hugo如何在首页和目录页隐藏一篇文章

代码

如果你希望某些文章在列表页(如首页、分类页、标签页等)上不显示,但是通过直接地址仍然可以访问,那么你可以通过自定义模板达到这个目标。

假设我们在文章的 front matter 中添加了一个新字段 `hidden`,将你想要隐藏的文章的 `hidden` 字段设为 `true`:

---
title: "我是一个示例标题"
date: 2024-06-24T02:58:48Z
hidden: true
---

然后我们需要在相应的列表页模板中排除设置了 `hidden: true` 的文章。例如,如果你正在使用默认主题,你可能需要修改 `layouts/_default/list.html` 文件。

在渲染文章列表的地方,将原来的 range 函数替换为 where 函数,新的代码可能看起来像这样

```html
<!-- 原来的代码 -->
{{ range .Pages }}
<!-- 展示文章代码 -->
{{ end }}
<!-- 新的代码 -->
{{ range where .Pages "Params.hidden" "!=" true }}
<!-- 展示文章代码 -->
{{ end }}
```

这样就可以实现`hidden: true` 的文章在列表页不显示,但可以通过直接链接访问。

故事

为什么要写这段代码呢?

因为我从Pelican切换到Hugo的博客平台后,发现之前一篇在必应搜索中点击率很高的博文无法访问,因为这两个静态博客平台的URL生成规则有所不同(而且我还修改了文章的标题)。所以,通过搜索引擎导流过来的访客只能看到一个’404错误’页面,但却找不到任何内容。

我曾尝试研究过Hugo平台的页面重写功能(没有此功能)、必应站长工具的网页搬家功能(微软关闭了这个功能)。因此,我只能开设一篇新的文章,仅用于“接待”必应搜索引擎的访客。

这篇文章上只有一个链接,它将用户引导至博文的新地址,除此以外,啥也没有。我并不希望在我的博客目录中显示这样一篇奇怪的文章,所以希望它可以隐藏起来,默默的帮我导流就好。

然后,我使用VS Code按照上述代码更改。通过搜索’range .Pages’,我修改代码为 ‘range where .Pages “Params.hidden” “!=” true’,这样基本就完成了。

当然,我使用的主题’Love It’还有小插曲,它的首页模板并未采用’range .Pages’的形式。但好在这个主题提供了一个选项:’hiddenFromHomePage: true’。

我只需要将它添加到文章的 front matter 里就解决了问题。”

发表评论