WordPressのスラッグが重複した場合の優先順位

2012-09-27

WordPressにはテンプレート階層という仕組みによって、
読み込まれるテンプレートファイルが自動的に決まってきます。

その振り分けに使われるのがスラッグです。
今回は「このスラッグが重複したらどうなるのか?」という話です。

スラッグは「投稿」「カテゴリ」「固定ページ」「タグ」に設定できます。

振り分けに使われるので「基本的に」WordPress内でスラッグは重複できません。
重複したスラッグを登録しようとするとWordPressに勝手にリネームされますので、
想定外のスラッグにされる前にスラッグは重複させない、ということが重要です。
(後で苦労する事を考えたら、安いものです)

先ほど「基本的に」重複できない、と書いたのは、実は例外があるからです。
例外とは「カテゴリと固定ページのスラッグは重複可能」という点。

重複するとどうなるのか。

パーマリンク設定次第では、スラッグがURLに使われますので、
重複したカテゴリページと固定ページのURLが同一になるケースがあります。
その場合、カテゴリページが優先されます。

category-sample.php と page-sample.php があり、
これを呼び出すURLが同一の場合、「page-sample.php」はずっと呼ばれないままです。

忘れてるとハマるので、注意したいですね。
私も過去にハマった事がありますw

固定ページが呼ばれない事を逆手にとる方法もあります。

category-sample.php はカテゴリ一覧ページなので、
このページ独自のコンテンツを登録する場所がありません。
(=カテゴリ一覧ページ用の投稿とか無いので)

つまり、同じスラッグの固定ページを用意しておいて、
カテゴリー一覧ページにもWordPress管理画面からコンテンツの管理が可能なように仕込む、
という裏ワザが可能です。
具体的には category-sample.php の中で、同じスラッグ名でget_pageします。

あまりおすすめできませんが、WordPressのコアファイルを修正したりするよりはスマートでは無いかと思います。