diff --git a/hugolib/content_map.go b/hugolib/content_map.go index f0b66d859..279c8e43a 100644 --- a/hugolib/content_map.go +++ b/hugolib/content_map.go @@ -533,6 +533,7 @@ func (m *contentMap) getPage(section, name string) *contentNode { func (m *contentMap) getSection(s string) (string, *contentNode) { k, v, found := m.sections.LongestPrefix(path.Dir(s)) + if found { return k, v.(*contentNode) } @@ -919,6 +920,9 @@ func (c *contentTreeRef) isSection() bool { } func (c *contentTreeRef) getSection() (string, *contentNode) { + if c.t == c.m.taxonomies { + return c.m.getTaxonomyParent(c.key) + } return c.m.getSection(c.key) } diff --git a/hugolib/page__tree.go b/hugolib/page__tree.go index 776c92166..08fda2289 100644 --- a/hugolib/page__tree.go +++ b/hugolib/page__tree.go @@ -121,6 +121,10 @@ func (pt pageTree) Parent() page.Page { return nil } + if pt.p.Kind() == page.KindTaxonomyTerm { + return pt.p.s.home + } + _, b := p.getTreeRef().getSection() if b == nil { return nil diff --git a/hugolib/taxonomy_test.go b/hugolib/taxonomy_test.go index 7c0644d51..abe4b97cd 100644 --- a/hugolib/taxonomy_test.go +++ b/hugolib/taxonomy_test.go @@ -537,3 +537,30 @@ categories.funny:|/blog/p1/| `) } + +func TestTaxonomiesParent(t *testing.T) { + t.Parallel() + + b := newTestSitesBuilder(t) + b.WithContent("p.md", `--- +title: "Page" +categories: ["funny"] +--- + +`) + + b.Build(BuildCfg{}) + + cat := b.GetPage("categories") + funny := b.GetPage("categories/funny") + + b.Assert(cat, qt.Not(qt.IsNil)) + b.Assert(funny, qt.Not(qt.IsNil)) + + b.Assert(cat.Parent().IsHome(), qt.Equals, true) + b.Assert(funny.Parent(), qt.Equals, cat) + + b.AssertFileContent("public/categories/funny/index.xml", `http://example.com/p/`) + // TODO https://github.com/gohugoio/hugo/issues/6909 b.AssertFileContent("public/categories/index.xml", `http://example.com/categories/funny/`) + +}