hugoはタクソノミーのタームに日本語を使うと、気を利かせて日本語URLにしてくれるのですが、日本語URL使いたくないです。新規に立ち上げたサイトなら日本語URLもアリでしょうけれど、これは旧サイトからの移転。URLはできる限り元のを使いたいわけです。

百歩譲ってこのサイトはまあテスト用というか遊び用なのでいいです。でももう一つhugoに移し替えたいサイトがあって、そっちは可能な限り元のURLを使いたいのですよ。そして元のURLは英数字なんですよ。

というわけで、このサイトはまあカスタマイズの実験用みたいな位置づけなので、ここでやってしまおうかと。

やりたいことは、タグの名称は日本語、URLは英数字にすること。

私はGo言語の知識がないし、hugoも最近触り始めたので、正直わからないことが多すぎて。ずいぶん時間がかかりましたが、ようやくなんとかなりました。

少々泥臭いやり方ですが、知識がないのだから仕方がない。

ざっくりした手順は以下の通り。

  1. configファイルの[permalinks]にタグのPermalinkを追加する

  2. content直下にタグのtaxnomy名のディレクトリ追加、そのディレクトリの下に_index.mdと各ターム名のディレクトリ追加、各ターム名のディレクトリの中に各_index.md作成

  3. index.mdのfront matterにTitleとslug追加。このTitleはそれぞれタグ、タームの表示名称。slugがURL用の英数字

  4. テンプレートの修正

テンプレートの修正は、タグの使用箇所全部。このサイトだと、サイドバーのタグ一覧表示、タグのリストページ、個別記事の下に記事に属するタグを表示してるので、その3つ。

サイドバーのタグ一覧と、タグの一覧ページは、単純にリンクのURLをパーマリンクに変えればいいだけ。

時間がかかったのは個別記事下のタグ一覧。

今までは、個別記事のfront matterに設定されてるタグ名を取得して、それを日本語URLに変えるだけでよかった。

けれども、個別記事はタグのパーマリンクは持ってません。タグのパーマリンクは別の場所に設定してるのだから、それをとってこないといけません。

私の知識では簡単な修正程度しかできないし、デバッグ文の入れ方すら知らなかったので、どうすればいいのか困りました。

結局、個別ページ内のタグのタームでGetpageを使って、タクソノミーとタームの_index.mdを探し出して、Titleとパーマリンクを取得できたのでそれでやりました。

タームの検索するためにディレクトリ名の文字列を「/」で連結する必要があったのですが、もうそこからわからなくて(笑)。

関数があるのか、そんなものは使わなくて+とかで連結できるのか?マニュアル読んでもわからないし。

printfで連結できるのがわかるまで、無駄に時間がかかりました。きっとこのへんの情報は当たり前すぎて誰も言わないレベルですよね(笑)。