更新: 2024-01-26 (金)
投稿: 2023-12-15 (金)
[Hugo] サイト内リンクで別記事のタイトルとリンクを自動出力するショートコード
別記事へのクロスリファレンスのリンクを貼りたい場合、標準の shortcode の ref だと、URL が取得できます。しかし、記事タイトルは自分で入力する必要があります。記事タイトルとリンクの両方を自動出力する shortcode を作成する方法です。
環境
- Hugo 0.121.1
結果
layouts/shortcodes/link-corss-ref.html
を作成します。
{{- $path := .Get 0 -}}
{{- with .Site.GetPage $path -}}
<a title="{{ .Title }}" href="{{ .Permalink }}">{{ .LinkTitle | default .Title }}</a>
{{- else -}}
<!-- Page not found: {{ $path }} -->
{{ errorf }}
{{- end -}}
各記事のマークダウンで以下のように使用します。
{{< link-corss-ref "/post/xxx/index.md" >}} へのリンクです。
説明
標準の shortcode の ref のメリットは、該当の記事が見つからない場合にビルドエラーとなります。
{{ ref "/post/xxx/index.md" }}
今回作成した shortcode は、該当の記事が見つからない場合に、エラーを出力してくれます。
エラーとなった場所が分かるようにエラーページを表示したかったので、何でも良いのですが {{ errorf }}
を使用してエラーを意図的に発生させています。
{{- $path := .Get 0 -}}
{{- with .Site.GetPage $path -}}
<!-- ページが見つかった場合 -->
{{- else -}}
<!-- ページが見つからない場合は、意図的にエラーを発生させる -->
{{ errorf }}
{{- end -}}
感謝
同じ課題
- Add shortcode for cross references with title · Issue #1729 · gohugoio/hugoDocs
- Cross-reference with automatic title - support - HUGO
参考
- Hugo | Links and Cross References
- LinkTitle | Hugo
- Create your own shortcodes | Hugo
- 【Hugo】Shortcodeをエスケープして表示する方法 - 時々前進
更新履歴
- 2024/01/26
- パス指定を
/post/xxx/
から/post/xxx/index.md
に修正
- パス指定を
関連記事
新着記事