HugoのTaxonomyを使うと投稿記事を分類することができますが、Taxonomyをリスト表示した際に
分類ごとの記事件数もカウントして表示したい!と思った時に、その機能が本ブログで使っているthemeに
無かったので自作しました。
config.tomlに表示切替のフラグを追加し、
[params.info]
taxonomiesCount = true # Add taxonomies count
表示が有効の場合、項目の横に対象の分類の件数を表示する処理を加えます。
<a href="{{ .Permalink }}">{{ .Title }}
{{if .Site.Params.Info.taxonomiesCount}}
{{ $title := urlize .Title }}
{{ range $taxonomy_name, $taxonomy := .Site.Taxonomies }}
{{ if eq $.Section $taxonomy_name}}
{{ range $key, $value := $taxonomy }}
{{ $term := urlize $key }}
{{ if eq $title $term }}
({{ $value.Count }})
{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</a>
HugoではデフォルトでtagsとcategoriesのTaxonomyが定義されていて、.Site.Taxonomies.tags
の様に種別を決め打ちで指定し件数を取得する手法は割と見受けられますが、Taxonomyは独自定義を簡単に追加できるので件数取得も汎用的に行いたいと思い上記の構成にしています。
hugo-layouts-lookup-rulesより、section、taxonomyおよびtaxonomyTermタイプの値が.Section
で取得できます。このため、.Site.Taxonomies
のkeyが.Section
と同じかを判定し大分類を特定します。
次に、分類項目のkeyと表示項目名(それぞれurlizeして形式を揃える)を双方が同じ値か判定し、合致した場合に分類項目が持つ件数を取得しています。