運営堂さんサイトリニューアルにあたって苦労したところを書き残しておくシリーズの3つ目です。
正直、今回一番苦労したのがこれです。
今回の要件定義で、URL構造も細かく指定がありました。
例えば、ブログならこんな感じ。
- ブログトップ
https://www.uneidou.com/blog/ - カテゴリーアーカイブ
https://www.uneidou.com/blog/renewal/ - ブログ記事
https://www.uneidou.com/17718.php
もうひとつのメインコンテンツである「ズバッと解決!GoogleAnalytics」はこんな感じ。
- カスタム投稿タイプアーカイブ
https://www.uneidou.com/ga-solution/ - カスタムタクソノミーアーカイブ
https://www.uneidou.com/ga-solution/words/ - 個別記事
https://www.uneidou.com/ga-solution/post-12875/
お気付きでしょうか。
カテゴリーアーカイブ・タクソノミーアーカイブのURLに、タクソノミースラッグが入っていません。
通常、カテゴリーアーカイブであれば
https://mypacecreator.net/blog/archives/category/study
https://www.ozonenotes.jp/category/websites/
といったように、‘category’ が入ります。
‘category’ という文字列が気に入らなければ、パーマリンク設定 > オプション > カテゴリーベース のところに入力すれば変えることはできます。が、取り除くことは通常できません。
同様に、カスタム投稿タイプ+カスタムタクソノミーの組み合わせの場合、Toro_Unitさん作のCustom Post Type Permalinksプラグインを使えば
というような /post_type/taxonomy_name/term_slug
の形式のURLにすることはできます。
が、taxonomy_nameを取り除くことはできません。
このようにURLの間に挟まる/category/ などという階層のことを「カテゴリーベース」「タグベース」「タクソノミーベース」という言い方をしますが、フォーラムとかアンカンファレンスとかで「これを取り除きたい」というご要望には何度も出合いました。
しかし、タクソノミーベースは通常、取り除くことができません。
「通常」なので、がんばれば実現は可能です(実際今回実現しましたし)が、通常できないのにはそれなりの理由があります。
この階層がないと、WordPressが「今どんな種類のページを表示させるべきなのか」を判別できないためです。
分かりづらいですね。
たとえばURLが http://example.org/blog/category/news
という形式であれば、WordPressはすぐに「このURLがリクエストされたら、投稿カテゴリーの中から’news’を探して返せばいいんだ」と分かりますが、これがなくなると カテゴリーなのか何なのか分からないので、あらゆるクエリから’news’に当てはまりそうなものをチェックしてどれを表示させるべきかを判断しなくてはならないため、WordPressにはやさしくなくなります。
サイト内に登録されている投稿や固定ページ、タクソノミー、ターム名によっては競合が起き、意図しない404エラーが発生するおそれもあります。
パーマリンク構造にpost_idを使った場合に、日付アーカイブのURLに/date/が自動的に挟まるのも、投稿IDの数字と、年月日の数字が競合して意図しないページが表示されるのを防ぐための配慮です。
実際、今回のカスタマイズ中にも、ブログのページネーションが404になってしまうという問題が発生しました。http://example.org/blog/page/2/
“category”を抜いたパーマリンク構造だとカテゴリーアーカイブと構造がかぶるので、上記のURLだと「”page”という親カテゴリー以下にある “2” という子カテゴリーのアーカイブ」を探しにいってしまう、というのが原因です。
WordPressのURL構造から’category’やタクソノミー名などを除去するのは、上述のWordPressがもともと備えている配慮を反故にするというということでもあるので、きちんと動作原理とリスクを把握して、責任が取れる場合にのみ行うようにしてください。
今回のパーマリンクを実現した方法について、コードを紹介するかどうか迷ったんですが、リスクを理解せずに気軽にコピペで実装する人が増えるのは本意ではないので、参考にしたページのみを記載しておきます。
実際には、私自身ここまでのカスタマイズの経験はなかったので、グランフェアズさんが自社の案件でいつも使っているコードを見せてもらって、さらにそのまま使えない部分を以下の情報を参考に書き直しました。(Custom Post Type Permalinksなどのプラグインは使っていません)
- 関数リファレンス/WP Rewrite – WordPress Codex 日本語版
- WordPress でカテゴリのリンクを変更する | dogmap.jp
- [WordPress] カスタム投稿タイプのリライトに関するまとめ | 制作メモ | 560DESIGNS
- WordPressの一歩踏み込んだパーマリンクカスタマイズ フラップイズム
- WordPressで固定ページのパーマリンク(URL)末尾にスラッシュ(/)を付ける
- Fixing a WordPress pagination 404 error – Mei Gwilym
上記参考サイトを読んで、完全にとは言わずともなんとなく把握できるところまで読み込めば、最初に紹介したような形のパーマリンクの実現は可能になります。
が、繰り返しますが、使用方法をよくお読みになり、用法用量を守って正しくお使いください。使い過ぎはあなたの健康を損なうおそれがあります。
WordPressのURL挙動に触れている日本語の情報って少ないんですが、このあたりの記事をぜひお読みいただきたいです。(読んだ当時は意味わからなかったんですが、数年経って体に染み付いてきた感じはあります)
- WordCamp Tokyo 2011 講演資料「WordPress の動作原理詳説」 | Simple Colors
- まず最初に学ぶべきWordPressの本質 | hijiriworld Web
- Rewrite APIその1 「Rewriteとパーマリンク」(WordPressプラグイン開発のバイブルのボツ原稿から) – Shinichi Nishikawa’s
今回、いままでなんとなくパンドラボックス的な感じで避けて通っていたパーマリンクカスタマイズ周りのフックについて、細かく調べる機会を得られたことはほんとうに貴重な機会でした。
さて、このシリーズはもう少し続きます。まだあるのかよ!って感じですが、まだありますw