特定の人に聞かれたり、教えたりしたことを書いとくシリーズです。ネタ的には多分既出です。
カスタム投稿タイプを使って企業サイトなどを制作する場合、
投稿部分はブログやお知らせなどで使っていて、パーマリンク設定を「数字ベース」にしていたり、
カスタム構造で自作の設定にしていたりして、頭にひとつ階層が挟まるようにしているケースの話です。
たとえばこんな状態ですね。
- /archives/%post_id%
- /entry/%postname%/
この時、カスタム投稿タイプ(例「よくある質問(faq)」を作ると、URLが
- http://example.com/archives/faq/11
- http://example.com/entry/faq/entry-title/
とかいう形になってしまい、ちょっと困る。
かといって /%post_id% とか /%postname%/ だけにしてしまうと
- http://example.com/11
- http://example.com/entry-title/
という感じで、ドメイン直下に投稿IDやタイトル(スラッグ)がくるURLになってしまい、なんかイケてない。
アクセス解析の時に、同一ジャンルのコンテンツで束ねた確認がしづらい。
というお悩みをお持ちの方、functions.phpでカスタム投稿タイプを作成している部分の記述を確認してみてください。register_post_typeという関数でいろいろ指定してあると思うんですが、その中に
'rewrite' => true
という記述がありませんか?
あてまる記述がない方もご安心ください。
何も記述していなければ、デフォルトは'rewrite' => true
です。
この部分を、
'rewrite' => array( 'with_front' => false )
に変えればあら不思議。
通常の投稿の場合は
- http://example.com/archives/1
- http://example.com/entry/entry-title/
みたいな感じで、パーマリンク設定で指定した階層名でまとめられて、
カスタム投稿タイプの場合は
- http://example.com/faq/11
- http://example.com/faq/entry-title/
みたいな感じで、投稿タイプのスラッグでまとめられるようになります。
なお、rewriteパラメータは他にも配列で指定できる項目があって
'rewrite' => array( 'slug' => 'question', //投稿タイプのスラッグと異なる文字列をURLに使いたい時に指定 'with_front' => false )
‘feeds’, ‘pages’, ‘ep_mask’という項目もあるのですが、変更しなくてはいけないケースに未だ出会ったことはありませんし、ここをお読みのみなさんも、よほど特殊なケースでないと触ることはないと思うのでので割愛します。
プラグインを使ってカスタム投稿タイプを作成している場合については、プラグインのオプション設定項目を確認してみてください。
なお、おそらく最もメジャーであろう「Custom Post Type UI」プラグインは、しばらくrewriteパラメータの中で、with_frontだけをtrueからfalseに変更する機能がありませんでした。
この手のプラグインは最初あまりよく意味の分かってなかった頃、数回使っただけなので、最近はどうなってるのか知らなかったんですが
現行のバージョンを確認したら、ちゃんと設定できるようになってました。
参考URL
- 関数リファレンス/register post type – WordPress Codex 日本語版
- Function Reference/register post type ≫ WordPress Codex