カスタム投稿タイプやカテゴリーアーカイブのパーマリンクをゴリゴリいじる – 運営堂サイト裏話(3)

タクソノミーアーカイブのURLから タクソノミーベースを削除するのはとっても大変です

運営堂さんサイトリニューアルにあたって苦労したところを書き残しておくシリーズの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プラグインを使えば

https://www.uneidou.com/ga-solution/ga_category/words/

というような /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などのプラグインは使っていません)

上記参考サイトを読んで、完全にとは言わずともなんとなく把握できるところまで読み込めば、最初に紹介したような形のパーマリンクの実現は可能になります。

が、繰り返しますが、使用方法をよくお読みになり、用法用量を守って正しくお使いください。使い過ぎはあなたの健康を損なうおそれがあります。

WordPressのURL挙動に触れている日本語の情報って少ないんですが、このあたりの記事をぜひお読みいただきたいです。(読んだ当時は意味わからなかったんですが、数年経って体に染み付いてきた感じはあります)


今回、いままでなんとなくパンドラボックス的な感じで避けて通っていたパーマリンクカスタマイズ周りのフックについて、細かく調べる機会を得られたことはほんとうに貴重な機会でした。

さて、このシリーズはもう少し続きます。まだあるのかよ!って感じですが、まだありますw

コメントをどうぞ

メールアドレス (必須・公開されません)
コメント本文

  • スパム・迷惑コメント投稿防止のため、メールアドレスの入力が必須ですが、公開はされません。何卒ご協力のほどお願いいたします。
  • 投稿いただいたコメントは管理者のチェック後掲載しておりますので、即時には反映されません。
  • 記載内容に関する批判や間違いの指摘などはそのまま掲載する方針ですが、投稿内容と無関係な誹謗中傷、一方的な罵詈雑言の場合は削除させていただく可能性があります。
  • 通常業務の合間にコメントチェックをしておりますので、すべてのコメントへのお返事が出来ない場合もございます。あらかじめご了承ください。
  • 管理人個人への連絡等は、コメント欄ではなくコンタクトフォームをご利用ください。

書籍を執筆しました

WordPress 標準デザイン講座【Version 4.x対応】


翔泳社さんより、2015/02/27発売しました。2年経ちますのでもう賞味期限切れだとは思いますが、一応実績として...

寄付歓迎(・ω<)☆

当ブログの記事があなたの役に立ったら、気が向いたらでいいのでドネーションいただけると更新の励みになります!
気が向いた方はこちらから

ブログ内検索