diff options
author | Razon Yang <[email protected]> | 2023-12-04 19:05:41 +0800 |
---|---|---|
committer | GitHub <[email protected]> | 2023-12-04 12:05:41 +0100 |
commit | 14d85ec136413dcfc96ad8e4d31633f8f9cbf410 (patch) | |
tree | 24fb956c14c7e075dad9223587cc0aef0a63a0b5 /tpl | |
parent | 171836cdfae7e9697fddafe262c46b9448bcb98e (diff) | |
download | hugo-14d85ec136413dcfc96ad8e4d31633f8f9cbf410.tar.gz hugo-14d85ec136413dcfc96ad8e4d31633f8f9cbf410.zip |
tpl: Allow using page resources on the images page parameter for `opengraph`, `schema` and `twitter_cards` templates
The page images selection order as follows:
1. Page's images parameter, image resources are supported.
2. Page's image resources that naming in *feature*, *cover* or *thumbnail* pattern.
3. If no page images specified, then the first one of site's images will be used as the fallback, supports site resources.
Diffstat (limited to 'tpl')
-rw-r--r-- | tpl/tplimpl/embedded/templates/opengraph.html | 14 | ||||
-rw-r--r-- | tpl/tplimpl/embedded/templates/partials/_funcs/get-page-images.html | 47 | ||||
-rw-r--r-- | tpl/tplimpl/embedded/templates/schema.html | 14 | ||||
-rw-r--r-- | tpl/tplimpl/embedded/templates/twitter_cards.html | 20 | ||||
-rw-r--r-- | tpl/tplimpl/template.go | 4 |
5 files changed, 59 insertions, 40 deletions
diff --git a/tpl/tplimpl/embedded/templates/opengraph.html b/tpl/tplimpl/embedded/templates/opengraph.html index f62ff474e..f3f41121c 100644 --- a/tpl/tplimpl/embedded/templates/opengraph.html +++ b/tpl/tplimpl/embedded/templates/opengraph.html @@ -3,17 +3,9 @@ <meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" /> <meta property="og:url" content="{{ .Permalink }}" /> -{{- with $.Params.images -}} -{{- range first 6 . }}<meta property="og:image" content="{{ . | absURL }}" />{{ end -}} -{{- else -}} -{{- $images := $.Resources.ByType "image" -}} -{{- $featured := $images.GetMatch "*feature*" -}} -{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} -{{- with $featured -}} -<meta property="og:image" content="{{ $featured.Permalink }}"/> -{{- else -}} -{{- with $.Site.Params.images }}<meta property="og:image" content="{{ index . 0 | absURL }}"/>{{ end -}} -{{- end -}} +{{- $images := partial "_funcs/get-page-images" . -}} +{{- range first 6 $images -}} + <meta property="og:image" content="{{ .Permalink }}" /> {{- end -}} {{- if .IsPage }} diff --git a/tpl/tplimpl/embedded/templates/partials/_funcs/get-page-images.html b/tpl/tplimpl/embedded/templates/partials/_funcs/get-page-images.html new file mode 100644 index 000000000..268ceb4be --- /dev/null +++ b/tpl/tplimpl/embedded/templates/partials/_funcs/get-page-images.html @@ -0,0 +1,47 @@ +{{- $imgs := slice }} +{{- $imgParams := .Params.images }} +{{- $resources := .Resources.ByType "image" -}} +{{/* Find featured image resources if the images parameter is empty. */}} +{{- if not $imgParams }} + {{- $featured := $resources.GetMatch "*feature*" -}} + {{- if not $featured }}{{ $featured = $resources.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} + {{- with $featured }} + {{- $imgs = $imgs | append (dict + "Image" . + "RelPermalink" .RelPermalink + "Permalink" .Permalink) }} + {{- end }} +{{- end }} +{{/* Use the first one of site images as the fallback. */}} +{{- if and (not $imgParams) (not $imgs) }} + {{- with site.Params.images }} + {{- $imgParams = first 1 . }} + {{- end }} +{{- end }} +{{/* Parse page's images parameter. */}} +{{- range $imgParams }} + {{- $img := . }} + {{- $url := urls.Parse $img }} + {{- if eq $url.Scheme "" }} + {{/* Internal image. */}} + {{- with $resources.GetMatch $img -}} + {{/* Image resource. */}} + {{- $imgs = $imgs | append (dict + "Image" . + "RelPermalink" .RelPermalink + "Permalink" .Permalink) }} + {{- else }} + {{- $imgs = $imgs | append (dict + "RelPermalink" (relURL $img) + "Permalink" (absURL $img) + ) }} + {{- end }} + {{- else }} + {{/* External image */}} + {{- $imgs = $imgs | append (dict + "RelPermalink" $img + "Permalink" $img + ) }} + {{- end }} +{{- end }} +{{- return $imgs }} diff --git a/tpl/tplimpl/embedded/templates/schema.html b/tpl/tplimpl/embedded/templates/schema.html index 20b477b59..8a55afe80 100644 --- a/tpl/tplimpl/embedded/templates/schema.html +++ b/tpl/tplimpl/embedded/templates/schema.html @@ -7,17 +7,9 @@ {{ with .Lastmod }}<meta itemprop="dateModified" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end}} <meta itemprop="wordCount" content="{{ .WordCount }}"> -{{- with $.Params.images -}} -{{- range first 6 . -}}<meta itemprop="image" content="{{ . | absURL }}">{{ end -}} -{{- else -}} -{{- $images := $.Resources.ByType "image" -}} -{{- $featured := $images.GetMatch "*feature*" -}} -{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} -{{- with $featured -}} -<meta itemprop="image" content="{{ $featured.Permalink }}"> -{{- else -}} -{{- with $.Site.Params.images -}}<meta itemprop="image" content="{{ index . 0 | absURL }}"/>{{ end -}} -{{- end -}} +{{- $images := partial "_funcs/get-page-images" . -}} +{{- range first 6 $images -}} + <meta itemprop="image" content="{{ .Permalink }}" /> {{- end -}} <!-- Output all taxonomies as schema.org keywords --> diff --git a/tpl/tplimpl/embedded/templates/twitter_cards.html b/tpl/tplimpl/embedded/templates/twitter_cards.html index f9f6f10b0..e66a5029a 100644 --- a/tpl/tplimpl/embedded/templates/twitter_cards.html +++ b/tpl/tplimpl/embedded/templates/twitter_cards.html @@ -1,22 +1,10 @@ -{{- with $.Params.images -}} -<meta name="twitter:card" content="summary_large_image"/> -<meta name="twitter:image" content="{{ index . 0 | absURL }}"/> -{{ else -}} -{{- $images := $.Resources.ByType "image" -}} -{{- $featured := $images.GetMatch "*feature*" -}} -{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} -{{- with $featured -}} -<meta name="twitter:card" content="summary_large_image"/> -<meta name="twitter:image" content="{{ $featured.Permalink }}"/> +{{- $images := partial "_funcs/get-page-images" . -}} +{{- with index $images 0 -}} +<meta name="twitter:card" content="summary_large_image" /> +<meta name="twitter:image" content="{{ .Permalink }}" /> {{- else -}} -{{- with $.Site.Params.images -}} -<meta name="twitter:card" content="summary_large_image"/> -<meta name="twitter:image" content="{{ index . 0 | absURL }}"/> -{{ else -}} <meta name="twitter:card" content="summary"/> {{- end -}} -{{- end -}} -{{- end }} <meta name="twitter:title" content="{{ .Title }}"/> <meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}"/> diff --git a/tpl/tplimpl/template.go b/tpl/tplimpl/template.go index 96b985cec..053b53b53 100644 --- a/tpl/tplimpl/template.go +++ b/tpl/tplimpl/template.go @@ -751,7 +751,7 @@ func (t *templateHandler) applyTemplateTransformers(ns *templateNamespace, ts *t return c, err } -//go:embed embedded/templates/* +//go:embed all:embedded/templates/* //go:embed embedded/templates/_default/* //go:embed embedded/templates/_server/* var embeddedTemplatesFs embed.FS @@ -779,7 +779,7 @@ func (t *templateHandler) loadEmbedded() error { // For the render hooks and the server templates it does not make sense to preserve the // double _internal double book-keeping, // just add it if its now provided by the user. - if !strings.Contains(path, "_default/_markup") && !strings.HasPrefix(name, "_server/") { + if !strings.Contains(path, "_default/_markup") && !strings.HasPrefix(name, "_server/") && !strings.HasPrefix(name, "partials/_funcs/") { templateName = internalPathPrefix + name } |