Hugo 0.40: The Revival of the Shortcodes
Hugo 0.40
is The Revival of the Shortcodes. Shortcodes is one of the prime features in Hugo. Really useful, but it has had some known shortcomings. @bep has been really busy the last week to address those.
In summary:
.Content
for a page retrieved in a query in a shortcode is now almost always available. Note that shortcodes can include content that can include shortcodes that can include content… It is possible to bite your tail. See more below.- Shortcodes are now processed and rendered in their order of appearance.
- Related to the above, we have now added a zero-based
.Ordinal
to the shortcode.
The first bullet above resolves some surprising behaviour when reading other pages’ content from shortcodes. Before this release, that behaviour was undefined. Note that this has never been an issue from regular templates.
It will still not be possible to get the current shortcode’s page’s rendered content. That would have impressed Einstein.
The new and well defined rules are:
.Page.Content
from a shortcode will be empty. The related.Page.Truncated
.Page.Summary
,.Page.WordCount
,.Page.ReadingTime
,.Page.Plain
and.Page.PlainWords
will also have empty values.- For other pages (retrieved via
.Page.Site.GetPage
,.Site.Pages
etc.) the.Content
is there to use as you please as long as you don’t have infinite content recursion in your shortcode/content setup. See below. .Page.TableOfContents
is good to go (but does not support shortcodes in headlines; this is unchanged)
If you get into a situation of infinite recursion, the .Content
will be empty. Run hugo -v
for more information.
This release represents 19 contributions by 3 contributors to the main Hugo code base.
Many have also been busy writing and fixing the documentation in hugoDocs, which has received 13 contributions by 6 contributors. A special thanks to @kaushalmodi, @anthonyfok, @bep, and @regisphilibert for their work on the documentation site.
Hugo now has:
- 25071+ stars
- 446+ contributors
- 222+ themes
Notes
- We have added a
timeout
configuration setting. This is currently only used to time out the.Content
creation, to bail out of recursive recursions. Runhugo -v
to see potential warnings about this. Thetimeout
is set default to10000
(10 seconds).
Enhancements
Templates
- Add
path.Ext
,path.Dir
andpath.Base
47e7788b @bep - Make
fileExist
use the same filesystem asreadFile
51af1d2e @bep #4633
Other
- Add
.Page.BundleType
402f6788 @bep #4662 - Add zero-based
Ordinal
to shortcode 3decf4a3 @bep #3359 - Process and render shortcodes in their order of appearance 85535084 @bep #3359
- Init the content and shortcodes early 19084eaf @bep #4632
- Prepare child page resources before the page itself 3238e14f @bep #4632
- Make .Content (almost) always available in shortcodes 4d26ab33 @bep #4632#4653#4655
- Add language merge support for Pages in resource.Resources 47c05c47 @bep #4644
- Improve .Content vs shortcodes e590cc26 @bep #4632
- Improve .Get docs 74520d2c @paulcmal
- Update missing positional parameter test for .Get e2b277bb @paulcmal
- Improve error message in metadata parse d681ea55 @bep #3696
- Add some context to front matter parse error 159bed34 @bep #4638
- Updated GetCSV error message (#4636) 5cc944ff @CubeLuke
- .Get doesn’t crash on missing positional param fixes #4619 236f0c84 @paulcmal
- fix syntax signature cd6a2612 @paulcmal
Improve this page