Jekyllで記事に関連した他の記事一覧を表示する
ブログの記事内にその記事と関連している他の記事を一覧として掲載したいときがあると思います。
たとえば、JavaScriptというタグをある記事に設定していたら、他の記事で同じようにJavaScriptのタグを設定している記事を表示させたいような場合です。
Jekyllの場合はテンプレートに以下のように書くことで実現可能です。
このブログの下部にある「Jekyllに関する他の記事を読む」や「最近の記事を読む」はこの方法で表示させています。
テンプレートエンジンはLiquidになるので、その文法にしたがって書いていくことになります。
いくつか繰り返しや分岐があるのでわかりにくいですが、最初のfor tag in site.tags
で設定しているタグの種類の数だけ繰り返し処理をしています。
その中でif page.tags contains tag[0] and tag[1].size > 1
の条件に合致する場合のみ、リンク一覧を表示するようにします。
最初のpage.tags contains tag[0]
は記事に設定しているタグがループで取得したタグと一致しているかをチェックしています。
その次のtag[1].size > 1
はタグ配下の記事が二つ以上ないと、「その他のページ」は表示しても意味がないために設定しました。
そして、assign related_posts = tag[1] | sort: "date" | reverse
で記事を発行日付の降順で並び替えをしています。
{% for tag in site.tags %}
{% if page.tags contains tag[0] and tag[1].size > 1 %}
{% assign related_posts = tag[1] | sort: "date" | reverse %}
<h2>{{ tag[0] }}に関する他の記事を読む</h2>
<ul>
{% for post in related_posts limit:5 %}
{% if post.title != page.title %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
{% endfor %}
こっちは最近の投稿を一覧として表示させるパターン。
<h2>最近の記事を読む</h2>
<ul>
{% assign recent_posts = site.posts | where_exp:"post", "post.title != page.title" | sort: "date" | reverse %}
{% for post in recent_posts limit:5 %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
この記事の環境情報
- jekyll 4.3.1
- 恵方巻きを食べてしまった
Jekyllに関する他の記事を読む
- Jekyllの中でLiquidの記法を文字列としてエスケープさせる方法
- JekyllのサイトをGA4に対応させる
- Jekyllのプラグインでsitemapを生成する
- Jekyllのタイムゾーンを日本時間にする
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら