summaryrefslogtreecommitdiffstats
path: root/docs/content/en/variables/taxonomy.md
blob: 901769b3164a1dff0fd4caa3e247cad24aac0e5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
---
title: Taxonomy Variables
linktitle:
description: Hugo's taxonomy system exposes variables to taxonomy and term templates.
categories: [variables and params]
keywords: [taxonomy,term]
menu:
  docs:
    parent: "variables"
    weight: 30
toc: true
weight: 30
aliases: []
---

## Taxonomy templates

Pages rendered by taxonomy templates have `.Kind` set to `taxonomy` and `.Type` set to the taxonomy name.

In taxonomy templates you may access `.Site`, `.Page`. `.Section`, and `.File` variables, as well as the following _taxonomy_ variables:

.Data.Singular
: The singular name of the taxonomy (e.g., `tags => tag`).

.Data.Plural
: The plural name of the taxonomy (e.g., `tags => tags`).

.Data.Pages
: The collection of term pages related to this taxonomy. Aliased by `.Pages`.

.Data.Terms
: A map of terms and weighted pages related to this taxonomy.

.Data.Terms.Alphabetical
: A map of terms and weighted pages related to this taxonomy, sorted alphabetically in ascending order. Reverse the sort order with`.Data.Terms.Alphabetical.Reverse`.

.Data.Terms.ByCount
: A map of terms and weighted pages related to this taxonomy, sorted by count in ascending order. Reverse the sort order with`.Data.Terms.ByCount.Reverse`.

## Term templates

Pages rendered by term templates have `.Kind` set to `term` and `.Type` set to the taxonomy name.

In term templates you may access `.Site`, `.Page`. `.Section`, and `.File` variables, as well as the following _term_ variables:

.Data.Singular
: The singular name of the taxonomy (e.g., `tags => tag`).

.Data.Plural
: The plural name of the taxonomy (e.g., `tags => tags`).

.Data.Pages
: The collection of content pages related to this taxonomy. Aliased by `.Pages`.

.Data.Term
: The term itself (e.g., `tag-one`).

## Access taxonomy data from any template

Access the entire taxonomy data structure from any template with `site.Taxonomies`. This returns a map of taxonomies, terms, and a collection of weighted content pages related to each term. For example:

```json
{
  "categories": {
    "news": [
      {
        "Weight": 0,
        "Page": {
          "Title": "Post 1",
          "Date": "2022-12-18T15:13:35-08:00"
          ...
          }
      },
      {
        "Weight": 0,
        "Page": {
          "Title": "Post 2",
          "Date": "2022-12-18T15:13:46-08:00",
          ...
        }
      }
    ]
  },
  "tags": {
    "international": [
      {
        "Weight": 0,
        "Page": {
          "Title": "Post 1",
          "Date": "2021-01-01T00:00:00Z"
          ... 
        }
      }
    ]
  }
}
```

Access a subset of the taxonomy data structure by chaining one or more identifiers, or by using the [`index`] function with one or more keys. For example, to access the collection of weighted content pages related to the news category, use either of the following:

[`index`]: /functions/index-function/

```go-html-template
{{ $pages := site.Taxonomies.categories.news }}
{{ $pages := index site.Taxonomies "categories" "news" }}
```

For example, to render the entire taxonomy data structure as a nested unordered list:

```go-html-template
<ul>
  {{ range $taxonomy, $terms := site.Taxonomies }}
    <li>
      {{ with site.GetPage $taxonomy }}
        <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
      {{ end }}
      <ul>
        {{ range $term, $weightedPages := $terms }}
        <li>
          {{ with site.GetPage (path.Join $taxonomy $term) }}
            <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
          {{ end }}
        </li>
          <ul>
            {{ range $weightedPages }}
              <li>
                <a href="{{ .RelPermalink}}"> {{ .LinkTitle }}</a>
              </li>
            {{ end }}
          </ul>
        {{ end }}
      </ul>
    </li>
  {{ end }}
</ul>
```

See [Taxonomy Templates] for more examples.

[Taxonomy Templates]: /templates/taxonomy-templates/