WordPress でウェブサイトを作るときに最初に何を考えているかについてまとめた連載の3回目でございます。前回はWPの投稿タイプなどの特徴を知って、サイト内のページを適切な投稿タイプに割り振る話をしました。今回は、URLがどうなるか、というお話。
わがままなURLにはできない宿命?
WordPress ではURLがページを「クエリ」になるため、色々とルールが存在し、それに従ってURLが決定されます。なので、ディレクタやクライアントが思う通りのURLにできないことがあります。
できるできないでケンカになる前にしれっと「こういうURLになりますので」とお知らせした方が波風立たない場合もあるので、サイトマップをもらった段階ぐらいで一度お知らせしておくのが無難だと思っています。(ただしWPの仕組みに詳しかったりPHPについてとても詳しかったりする人は、この辺の問題を華麗に解決できるんだと思います。私はできないので、WPのルールに従って無理のないURLにします。その方が何かと安全そうだし。。。)
そもそもどういうURLになるのかについて、知っておくのがいいでしょう、と思ったので、下記に例をあげます。
パーマリンクの設定
URLは「設定」>「パーマリンク設定」である程度決まってきます。
パーマリンクの設定については、上記のように「月と投稿名」あたりを選択していると仮定して、それぞれの投稿タイプのURLの例を見ていきたいと思います。
投稿の場合
シングルページ(投稿名はfooとする):http://hogehoge.com/2017/10/foo
月別アーカイブ:http://hogehoge.com/2017/10/
カテゴリアーカイブ(カテゴリ名をfooとする):http://hogehoge.com/category/foo
投稿の一覧ページ:http://hogehoge.com/
シングルページのURLにカテゴリーなどのスラッグ名を入れたい場合
これも、よくある要件かなと思いますが、私は(面倒なので)お断りすることが多いです。パーマリンクの設定とプラグインの利用で実現はできるようです。カテゴリは、基本的に、ひとつの記事に対して1つだけ選択するという考え方であれば、カテゴリのスラッグをURLに含んでいて何ら問題はないと思います。
ですが、本当に、ひとつの記事はひとつのカテゴリにしか関連していないのか?(だったらそもそもカテゴリーはチェックボックスではなくラジオボタンとして設計されているべきなのに、そうなってない)と考えるとき、そうでもないかなあ、という場合が多々あります(そういう場合は、そもそも「タグ」を使うのが真っ当かもしれません)。複数の分類に所属する場合があるなら、シングルページのURLに採用するカテゴリはどう考えるわけ?その場合、別の文脈からたどり着いた人にとって、その記事のURLは違和感のあるものになるのでは?などなどと思いついてしまい、面倒だなー。。。と思うわけです。
運用次第の問題であるので、
ブログだから、ニュースだから、それを示すスラッグを追加した
あとありがちなのは、投稿をブログとして用いる時に、
http://hogehoge.com/blog/2017/10/foo
というURLにできないか?という要件でしょうか。これは特に問題にならないです。
その場合には、パーマリンク設定で「カスタム構造」を選択し、以下のように書いて保存します。
/blog/%year%/%monthnum%/%postname%/
さらに、「固定ページ」でブログのトップページに当てるページを新規作成し、スラッグ名を「blog」とします。それから設定>表示設定 の「フロントページの表示」を「固定ページ」にし、「投稿ページ」に先ほど作った固定ページを選択します。
その結果のURLは以下のようになります。
シングルページ(投稿名はfooとする):http://hogehoge.com/blog/2017/10/foo/
月別アーカイブ:http://hogehoge.com/blog/2017/10/
カテゴリアーカイブ(カテゴリ名をfooとする):http://hogehoge.com/blog/category/foo/
投稿の一覧ページ:http://hogehoge.com/blog/
この設定をする場合の注意点ですが、カスタム投稿やカスタムタクソノミーを合わせて作る場合は、フロントのリライトをfalseに設定してください。
カテゴリーやタグの記事一覧について注意点
あと、カテゴリーアーカイブの時の「/category」を無くしたい、というオーダーもあるのですが、これは基本的にお断りしています。理由は、例えば、カテゴリのスラッグ名と、投稿や固定ページのスラッグ名などで重複があった場合に、パーマリンクの設定によっては全く同じURLになってしまう可能性があり、それが起きるとページに正しくアクセスできないからです。
固定ページ
固定ページ(スラッグ名をfruitsとする):http://hogehoge.com/fruits/
子ページ(スラッグ名がappleで親ページがfruitsだった場合の子ページ):http://hogehoge.com/fruits/apple/
孫ページ(スラッグ名がfujiで親ページがappleだった場合の孫ページ):http://hogehoge.com/fruits/apple/fuji/
割と、素直な階層構造です。階層は幾つでも深くしていけると思います(が孫ページ以上を作ったことはありません)。
カスタム投稿
カスタム投稿のスラッグが books でシングルページの投稿名が foo だった場合。さらに親子関係を持つカスタム投稿で、子ページのスラッグがchildだったら。
カスタム投稿のシングルページ:http://hogehoge.com/books/foo/
カスタム投稿のシングルページ(子ページ):http://hogehoge.com/books/foo/child/
カスタム投稿のアーカイブページ:http://hogehoge.com/books/
カスタムタクソノミーのアーカイブ
カスタムタクソノミーのスラッグが printing で、分類が kadokawa だった場合。
カスタムタクソノミー(出版社)の「角川」のアーカイブ:http://hogehoge.com/printing/kadokawa/
ここでも、この「出版社」という分類はカスタム投稿のbooksの記事を分類しているので、
http://hogehoge.com/books/kadokawa/
のようにならないのか?というオーダーがありますが、これもお断りしています。理由はカテゴリーの時と同じです。
ただし、
http://hogehoge.com/book/printing/kadokawa/
であれば、セーフかな、と思います。
ただし、
http://hogehoge.com/books/printing/kadokawa/
は、うーん、ギリギリアウト、微妙なところです、迷います。カスタム投稿が親子関係を持たないタイプであった場合はギリセーフかな、と思います。
このようなURLの変更には、カスタムタクソノミーを設定するときにrewriteの項目で設定し、かつ、リライトルールを追加する必要があります。
まとめ
WPでは標準のルールを逸脱したわがままURLを作ろうとすると、ちょっと苦労することがあります。あらかじめ、あまり無理のないURLならこうなります、というのを一覧化して「これ以上カスタムしたい場合は別途料金かかります」と割り切る必要があります。
サイトマップのそれぞれのページに投稿タイプを書き込んだ際、URLについても合わせて確認し、一覧に書き出して確認すると良いでしょう。
次回は各ページを出力するテンプレートの話をしたいと思っています。