自訂Hugo的RSS訂閱,過濾特定文章不讓其出現在RSS列表

想要訂閱Hugo靜態網站更新,除了依賴第三方提供的Email電子報服務,就是使用RSS feed這個古老的手段了。儘管現在已經越來越少人用,但RSS仍然是那些不想被搜尋引擎與演算法決定觀看內容的選擇。

Hugo內建支援RSS,大多主題也支援RSS。Hugo生成的RSS通常位於網站根目錄下的rss.xml檔案內。如果想要讓人訂閱RSS,就提供網址給讀者就行了。

例如在RSS閱讀器Fluent Reader輸入:http://ivonblog.com/rss.xml即可訂閱本站的RSS feed,並收到新文章的通知。如果開啟全文收錄的話,甚至不用跳轉到本站也可以閱讀文章。

不過,RSS的問題在於它會將每一篇文章收錄進去,這代表不管我發什麼都會被人看光光 —— 比方說那些我刻意從首頁隱藏的敏感文章,一般從搜尋引擎進來的讀者不容易找到,可是訂閱RSS的就會被敏感文章轟炸。

儘管上面說現在比較少人用RSS,但我還是要考量到想單純看較為「乾淨」內容的RSS訂閱讀者,為此決定修改RSS的內容,過濾掉特定分類的文章。

1. 修改RSS範本

Hugo預設的RSS範本可在Github找到。要覆寫內建RSS的話,就是在網站根目錄新建layouts/_default/目錄,再新增rss.xml檔案,將預設的RSS範本內容填進去後再開始修改。

這裡要注意:有些網站主題會使用自己的RSS範本,例如我的MemE主題是使用index.sectionsrss.xml來產生RSS (通常在config.toml也會有RSS的相關設定)

那麼就要改成修改這個檔案。將位於網站根目錄下的themes/meme/layouts/index.sectionsrss.xml複製到/layouts/index.sectionsrss.xml,再修改這個檔案。

開啟RSS.xml的檔案內容,找到這一段

1
2
3
4
{{ range $pages }}
{{ $page := . }}
{{- $author := partial "utils/author.html" $page -}}
<item>

這一段就可以寫判斷式來過濾產生的RSS內容了。我的過濾方式:讀取文章的frontmatter裡面的categories陣列,讀取第一個值,如果是要過濾的文章類別,那麼就跳過寫入RSS。

<item>的上方加入if判斷式,當文章的分類不是deepdark的時候才寫入RSS。不過如果你有限定RSS是抓取最新10篇文章的話,此方法會導致該文章直接被鬼隱,導致產生的RSS不滿10篇。

1
{{ if ne (index (.Params.categories) 0 ) "deepdark" }}

然後在</item>下方加入end

</item>
{{ end }}

2. 確認成果

  1. 本機預覽,開啟http://localhost:1313/rss.xml,使用CTRL+F搜尋文章看是否已經成功過濾
1
hugo server -D
  1. 保險起見,生成靜態HTML
1
hugo
  1. 再開啟public/rss.xml查看內容是否已經正確過濾。

參考資料


感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。

這是Giscus留言板,需要登入Github帳號才能留言。方便您張貼程式碼,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。