WordPressのスラッグの仕様

以前からPostスラッグの重複は出来なかったが、ver.2.3あたりからさらに重複に厳しくなってきた。 ver.2.7.1以降は以下の通り。

  • サイト全体で重複不可……カテゴリスラッグ、Postスラッグ、tagスラッグ
  • 同じPage下の同じ階層以外は重複可能……Pageスラッグ
  • 重複可能……Post名、Page名、カテゴリ名(作成時には重複不可。後で修正すれば重複可能)、tag名

よって、たとえば以下のようなカテゴリ構成にしようとした場合、「plugin」「faq」スラッグが重複するため、「plugin-dokuwiki」「faq-dokuwiki」といった風にスラッグ名が強制的に変更される1)

  トップページ--+--ワードプレス(wordpress)--+--プラグイン(plugin)
                |                           |
                |                           +--FAQ(faq)
                |
                +--ドクウィキ(dokuwiki)--+--プラグイン(plugin)→plugin-dokuwikiに強制変更
                                         |
                                         +--FAQ(faq)→faq-dokuwikiに強制変更

以前は末尾に「-2」と付け足していく仕様だったが、ver.2.5以降は上位カテゴリのスラッグ名を追加して重複を避けるようになった2)

カテゴリとタグは内部的にはほとんど同じで、データベースのtermsテーブルを共用しており、ある程度連動している。

  1. Post編集画面で、既存のカテゴリスラッグ名をタグ欄に入力して保存すると、そのカテゴリと同名・同じスラッグ名のタグが新規作成される。
  2. 投稿→タグで タグ名を変更すると、カテゴリ名も連動して変更される

なお、Simple Tagsプラグインでタグ名を変更した場合は「新しいタグを作った」とみなされ、カテゴリとタグの連動が切れる。

この仕様の有効性

  • 長所……システムにとっても人間にとっても利便性が高い
    • 内容を類推しにくいIDではなく、ある程度類推出来るスラッグ名で、Post・カテゴリ・タグが一意に定まる
    • 階層構造に頼らなくても、コンテンツを的確に分類出来る
  • 短所……スラッグが冗長3)、あるいは人間の目で見て無意味なもの4)になりやすい

スラッグの重複規制が厳しくなる一方、ver.2.5以降はカテゴリIDやPost IDを管理画面に表示しなくなったので、「IDではなくスラッグで、サイト内コンテンツを一意に定めよう」という方向性と思われます。

Pageスラッグが昔のままなのはよくわからないけど、PostとPageは内部的にはほぼ同じだし5)、いずれは重複不可になるのかも。

実際のところ、以下のようなサイト構成の場合、

  Drupal
    features
    docs
  WordPress
    features
    docs

同じ「features」や「docs」であってもカテゴリが異なるわけだから、スラッグを「features-drupal」「docs-drupal」「features-wordpress」「docs-wordpress」という風に命名するのは理にかなってはいます。
むしろ、システム内のどこにあるかによって、コンテンツに同じ名前をつけれたりつけれなかったりする方がおかしいのかも。カテゴリ分けしているという事はすなわち内容や役割が違うという事で、ならばコンテンツ名は別であるべき。

でもこの仕様は、個人的にはあまり好みじゃない。たとえば複数のCMSを解説するサイトを作ったとして、重複を避けるために

  • /drupal/docs/getting-started/
  • /wordpress/docs-wordpress/getting-started-2/
  • /dokuwiki/docs-2/gs/

…みたいな感じでスラッグをひねるより、

  • /drupal/docs/getting-started/
  • /wordpress/docs/getting-started/
  • /dokuwiki/docs/getting-started/

と出来る方がスマートだと思う。
ver.2.3以降のWordPressは、「1つのPC内で、フォルダ名やファイル名は一切重複出来ない」というのと本質的には同じです。理論的に正しくて有用でも、単純に使いにくいです。自分にとっては。

しかしおそらく「IDは一般的な利用ではあまり使われなくなっていく」「サイト内では、スラッグは重複しない」という大前提で本体やプラグインが開発されていくだろうから、WPを使うなら慣れるべきという事かと。あるいは、今のところ重複可能なPageだけでコンテンツを作るか。

Pageとカテゴリが同じURLになる場合

Pageスラッグとカテゴリスラッグは、同じ名前をつける事が出来る。よって、サイト構成によっては、Pageとカテゴリが同じURLになる事がある。この場合、カテゴリスラッグが優先される。

こだわりどころじゃない?

「/?p=N6)は見苦しいから/category/post-name/のようなフレンドリーURLに変えるべき」という文章は公式サイトも含めてよく見かけるけど、「カテゴリIDが管理画面から見えなくなって困る」はかなり少なくなり(表示するプラグインはあります)、重複スラッグ名あたりになると、

  • 日本語でタグ付けをしていた人
  • 同名のカテゴリスラッグを多用していた人

が困っているぐらいで、全体的には大して問題になってない感じ。一応、http://core.trac.wordpress.org/ticket/5034http://core.trac.wordpress.org/ticket/6211 にはなってますが、優先的に解決する気はなさそう。

実際、

  • 同名のカテゴリスラッグ・Postスラッグを多数作りたくなるような構成のサイトは、むしろ珍しい
  • 重複禁止なら、スラッグを少し変更すれば済む話。訪問者はURLとかそんなに見てない
  • そもそもパーマリンクストラクチャでスラッグを使わずpostidなどを利用した場合7)、カテゴリスラッグはともかくPostスラッグが訪問者の目に触れる事は、ほとんどない
  • どうしても気になるならPageだけでサイトを作るか、MODxやDrupalやMovable Typeなどを使えばいい

という事なわけで。

1) 後で修正出来るが、何にせよカテゴリ、Post、タグのスラッグ名重複は不可
2) 条件によっては数字がつく事がある
3) 親カテゴリのスラッグが付け足される
4) 「-2」が付加されたり、冗長さと重複を避けるために略したり
5) 相互変換出来るプラグインもある
6) WordPressの本来の記事番号
7) WPで作られた商用サイトの多くはそうなっている。その方が制作者も管理者も楽
 
wordpress/slug.txt · 最終更新: 2009/10/20 01:06 by admin
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki