Web サイトのサイドバーなどに、タクソノミータームの一覧(つまりタグの一覧、タグクラウドなど)を表示しておくと、同じ系統の記事に素早くアクセスできて便利です。
ここでは、タクソノミーとして Hugo デフォルトの tags
と categories
が定義されていることを前提とします。
特定のタクソノミーのターム一覧を表示(タグの一覧を表示する)
ここでは、tags タクソノミーに含まれているターム一覧を表示する例を示します(つまりタグの一覧です)。 多くのサイトでは、使用するタクソノミーの数は限られている(デフォルトの tags や categories で間に合うことが多い)ので、この使い方が一番多いかもしれません。
各リンクの後ろには、そのタグを含むページの数を表示しています。
ページ数の多い順に列挙するには次のようにします。
ターム一覧と、そのタームに所属するページを列挙する
タグ別にページの一覧まで表示してしまいたい場合は次のようにします。
全タクソノミーのターム一覧を表示
タクソノミーが tags
や categories
以外にもたくさん定義されている場合、全てのタクソノミーをループ処理で出力してしまうのがよいかもしれません。
下記の例では、1 つ目の range
ループですべてのタクソノミーをループ処理し、2 つ目の range
ループで各タクソノミー内のタームをループ処理しています。
タクソノミーごとにタームの一覧情報だけ出力すればよいのであれば、$.Site.GetPage
を組み合わせて使用することで、もう少しシンプルに記述することができます。
{{- range $taxonomyName, $taxonomy := .Site.Taxonomies }}
<h2>{{ $taxonomyName }}</h2>
<ul>
{{- range ($.Site.GetPage "taxonomyTerm" $taxonomyName).Pages }}
<li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
{{- end }}
</ul>
{{- end }}
さらに、タームが付加されている各ページへのリンクをすべて表示したいのであれば、次のような感じで記述すればよいでしょう。
<h1>全ページのタクソノミー別リンク</h1>
{{- range $taxonomyName, $taxonomy := .Site.Taxonomies }}
<h2>{{ $taxonomyName }}</h2>
{{- range $termName, $entries := $taxonomy }}
<h3>{{- $termName }}</h3>
<ul>
{{- range $entries.Pages }}
<li><a href="{{ .RelPermalink}}">{{ .LinkTitle }}</a>
{{- end }}
</ul>
{{- end }}
{{- end }}
出力結果は長くなってしまうので省略します。 大きなサイトではあまりにも巨大なリンク集になってしまうので使いものにならないかもしれませんが、小規模なサイトでは、タクソノミー別のサイトマップを作成したいときに使えるかもしれません。