WordPressで、通常の投稿やアーカイブページなどのURLは、ダッシュボードのパーマリンク設定ページで設定できます。
しかし、カスタム投稿タイプのURLに関しては、ダッシュボードでの設定はできませんし、思ったようなURL構成にするのが難しいです。

ここでは記事: カスタム投稿タイプの設定を踏まえながら、カスタム投稿タイプのパーマリンクを思い通りにカスタマイズする方法をまとめました。

タクソノミーのアーカイブもある場合など、設定が複雑化しそうな場合には、プラグインを使った方法もお勧めです。
記事: カスタム投稿タイプのパーマリンクを設定するプラグイン — Custom Post Type Permalinks

まず、URLを投稿名ベースにするか、数字ベースにするか?

最初に押さえておくポイントは、ダッシュボードのパーマリンク設定デフォルト以外にした場合、カスタム投稿タイプのパーマリンクは常に投稿名(スラッグ)がベースになるという点です。

例えば、パーマリンク設定数字ベースに設定します。

スクリーンショット 2014-03-09 10.52.16

この設定で、カスタム投稿タイプの記事を作成してみますが、パーマリンクは数字ベースにはなりません。

スクリーンショット 2014-03-09 11.01.38

パーマリンクが投稿名ベースだと、日本語のタイトルの記事はURLにも日本語を含んでしまうことになります。
URLには日本語を使いたくないというケースは多いと思います。
投稿毎に英字のスラッグを設定する事で回避する事は出来ますが、記事数が多くなる場合は面倒です。

ここでは、

  • カスタム投稿タイプのパーマリンクを投稿名ベースにする
  • カスタム投稿タイプのパーマリンクを数字ベースにする

という2通りのケースについて説明していきます。

パーマリンクを投稿名ベースにする場合

カスタム投稿タイプのパーマリンクを投稿名ベースにする場合、WordPressのデフォルトの挙動になりますので、難しくありません。

まず、functions.phpに以下のコードを追加して、カスタム投稿タイプを設定します。

アーカイブページ(記事の一覧ページ)が必要な場合は、必ず'has_archive'trueにします。

次に、ダッシュボードのパーマリンク設定ページを開き、設定をします。

スクリーンショット 2014-03-09 12.24.15

いずれかの設定を選択し、変更を保存します。
※変更が無い場合でも、リライトルールを更新する必要があります。その場合、一度デフォルトに変更して保存した後、再度パーマリンクの設定を行ってください。
参照記事: パーマリンクの設定がうまく反映されない時の対処法

日付と投稿名、月と投稿名、投稿名のいずれかを選択した場合、カスタム投稿タイプのパーマリンクは、

http://my-site.com/news/投稿名/

のようになります。

余分なディレクトリを除去するための設定

ダッシュボードのパーマリンク設定ページで、数字ベースを選択した場合、カスタム投稿タイプのパーマリンクは、

http://my-site.com/archives/news/投稿名

のように、投稿タイプ名の前にarchivesディレクトリを挟む形になります。

また、カスタム構造で以下のように設定したとします。

スクリーンショット 2014-03-09 12.46.12

この場合、通常の投稿とカスタム投稿のパーマリンクは、それぞれ、

通常の投稿:

http://my-site.com/blog/投稿名/

カスタム投稿:

http://my-site.com/blog/news/投稿名/

のようになります。

カスタム投稿のパーマリンクで、archivesディレクトリやblogディレクトリが必要ない場合は、functions.phpのregister_post_type関数に、以下の設定を加えます。

この設定を加える事により、

通常の投稿:

http://my-site.com/blog/投稿名/

カスタム投稿:

http://my-site.com/news/投稿名/

というパーマリンクになります。

パーマリンクを数字ベースにする場合

カスタム投稿タイプのパーマリンクを数字(投稿ID)ベースにします。

通常の投稿:

http://my-site.com/archives/123

カスタム投稿:

http://my-site.com/archives/news/123

まず、functions.phpに以下のコードを追加し、カスタム投稿タイプの設定を行います。
※前出のパーマリンクを投稿名ベースにする場合と同じコードです。

次に、functions.phpにさらに以下のコードを追加して、カスタム投稿タイプでも数字ベースのパーマリンクが使えるようにします。

最後に、ダッシュボードのパーマリンク設定ページで、パーマリンクを設定して保存します。
変更が無い場合でも、リライトルールの更新を行ってください。
参照記事: パーマリンクの設定がうまく反映されない時の対処法

スクリーンショット 2014-03-09 15.24.45

これでパーマリンクが数字ベースになりました。

スクリーンショット 2014-03-09 15.27.29

余分なディレクトリを除去するための設定

newsディレクトリが、サイトルートの直下になるようにカスタマイズします。
ここでは、以下のようなパーマリンクになるように設定します。

通常の投稿:

http://my-site.com/blog/123

カスタム投稿:

http://my-site.com/news/123

まず、register_post_type関数に、以下の設定を追加します。

次に、post_type_linkフィルタとrewrite_rules_arrayフィルタを、以下のように変更します。

最後に、ダッシュボードでパーマリンク設定をします。
リライトルールの更新も忘れずに行ってください。

スクリーンショット 2014-03-09 15.37.14

これでパーマリンクのカスタマイズは完了です。

スクリーンショット 2014-03-09 15.40.13