WordPressをブログではなく、ウェブサイトのCMSとして使うときに、カスタム投稿タイプやカスタムタクソノミーが便利です、というのを再三言っておりますが。
タクソノミー?? ターム??? よくわからない!
という方はまず、前回書いた記事をご覧ください。WordPressの「タクソノミー」と「ターム」って、何?
カスタムタクソノミーを設定し、タームを設定して、同じタームの記事を集めたアーカイブを作ることができます。そのアーカイブページのURLは、以下のようになります。
さて、ここで、タクソノミーのアーカイブのページのURLについて
http://ドメイン/works/web/
みたいに、できないの??との問い合わせがあったりします。
おっしゃることはものすごく、気持ちも理解できるのですが、「すみません、私には方法がわかりません」とお断りしてしまいます。
どなたか解決策をお持ちでしたら教えていただきたいです!(いや、何かはあるのだと思うのですが・・・・・・私の足りない頭で思いついたことは最後に書きます)
ですので、苦し紛れに、
http://ドメイン/works/category/web/
ではどうでしょうか・・・・と、提案してお茶を濁します。
今回は、このようにお茶を濁す方法を解説したいと思います。(前フリ長い)
制作実績、のようなカスタム投稿タイプを追加して、それらをカテゴリー分けするために、カスタムタクソノミーを設定した、というような想定です。
カスタム投稿タイプのスラッグ works
カスタムタクソノミーのスラッグ works_cat
という、設定だとして、functions.phpに次のように書きます。
function create_tax_init() { // 制作実績のカテゴリー register_taxonomy( 'works_cat', 'works', array( 'label' => __( '制作実績分類' ), 'hierarchical' => true, 'rewrite' => array( 'with_front' => false, 'slug' => 'works/category' ) ) ); } add_action( 'init', 'create_tax_init' ); //これがミソ、リライトルールを追加 add_rewrite_rule('works/category/([^/]+)/?, 'index.php?works_cat=$matches[1]', 'top');
これを記述してアップロードした後、管理画面を開いて、設定>パーマリンク設定を、特に何も変更せずに、設定を更新してください。
すると、タクソノミーのアーカイブが
http://ドメイン/works/category/web/
こんな感じに変更できます。
add_rewrite_rule()について、詳しくはcodexを見てみてください。
https://wpdocs.osdn.jp/Rewrite_API/add_rewrite_rule
いかがでしょうか?ちょっとはフレンドリーなURLになったように思います。
で。どうして http://ドメイン/works/web/ のような、慣例的なURLにするのが「難しそう」となるかと言いますと、カスタム投稿タイプのシングルページが
http://ドメイン/works/slug/
となるため、見分けがつかないのではないか、ということがあります。
なので、例えばシングルページの方を
http://ドメイン/works/detail/slug/
などというふうに変更すれば、タクソノミーのページを、
http://ドメイン/works/web/
とすることは、可能なのかもしれません。この場合も、おそらく、カスタム投稿タイプの設定にある、rewrite 項目の設定を工夫し、add_rewrite_rule()でリライトルールを追加することになると思います。
また、同様にシングルページのURLについて
http://ドメイン/works/web/slug/
というふうに、タームのスラッグ名(webの部分)を含んだURLにしたい、という要望も、おそらくあると思います。これも悩ましいのですが、リライトルールの設定を駆使すれば、できる、の、かも?ただ、複数のタームを選択できる場合などに、同一の内容で複数のURLが存在することになるのではないか、その取り扱いをどうするか、などの懸念もあります。総じて、「あんまりうまくないなあ・・・」という結論にいたってしまいがちな私です。未熟者ゆえかもしれませんが、WPが用意している範囲の解決法でどうにか回す、という方が安全であろう、という気持ちもあります。PHPなどにパーフェクトに詳しくて、セキュリティの管理もばっちりさ!・・・・と、申し上げられるほど詳しいわけではないので、少なくとも現時点でできる対応はここまでかな、と思っております。
俺は詳しいからへっちゃらだぜ!解決しちゃるぜ!という方は、ぜひ名乗り出てくださいませ!よろしくお願いいたします。