カスタム投稿のパーマリンクをカスタム設定できるWordPressのプラグイン「Custom Post Type Permalinks」を使ってみます。
インストール
プラグイン > 新規追加 を選択して、右上の検索ボックスで「Custom Post Type Permalinks」と検索して、今すぐインストールをクリックします。
インストール後、有効化をクリックします。
プラグインを有効化したら、設定 > パーマリンク設定を選択します。
下部にカスタム投稿タイプのパーマリンク設定が追加されました。
設定方法
functions.phpにカスタム投稿を作成する記述を追加します。
functions.php
function create_posttype() { register_post_type('item', array( 'label' => '商品', 'public' => true, 'menu_position' => 5, 'hierarchical' => true, 'supports' => array( 'title', 'editor', ), 'has_archive' => true, 'rewrite' => array( 'with_front' => false, ), ) ); // カスタムタクソノミーを作成(カテゴリー) register_taxonomy('item_cat', 'item', array( 'label' => 'カテゴリー', 'hierarchical' => true, 'rewrite' => array( 'slug' => 'category', 'with_front' => false, 'hierarchical' => true, ), ) ); // カスタムタクソノミーを作成(タグ) register_taxonomy('item_tag', 'item', array( 'label' =>'タグ', 'hierarchical' => false, 'rewrite' => array( 'slug' => 'tag', 'with_front' => false, 'hierarchical' => true, ), ) ); } add_action('init', 'create_posttype');
カスタム投稿が追加されました。
プラグインで特に設定を行わない場合、パーマリンクは以下のようになります。
- 一覧ページ
- http://ドメイン名/item/
- 個別ページ
- http://ドメイン名/item/投稿名/
- カテゴリー一覧ページ
- http://ドメイン名/category/カテゴリー名/
- タグ一覧ページ
- http://ドメイン名/tag/タグ名/
カテゴリーとタグの一覧ページを/item/以下にしたいので、設定 > パーマリンク設定の 「カスタマイズされたカスタムタクソノミーのパーマリンクを使用する。」にチェックを入れます。
チェック部分に書かれている通りなのですが、カスタムタクソノミーのパーマリンクを「http://ドメイン名/post_type/taxonomy/term」の形に設定することができます。
変更を保存すると、パーマリンクを以下のように変更することができました。
- 一覧ページ
- http://ドメイン名/item/
- 個別ページ
- http://ドメイン名/item/投稿名/
- カテゴリー一覧ページ
- http://ドメイン名/item/category/カテゴリー名/
- タグ一覧ページ
- http://ドメイン名/item/tag/タグ名/
【参考サイト】
- WordPress » カスタム投稿タイプのパーマリンクを設定するプラグイン — Custom Post Type Permalinks | MORILOG
- カスタム投稿タイプのパーマリンクを変更する『Custom Post Type Permalinks』
はじめまして。
個別ページの、
http://ドメイン名/item/投稿名/
最後の「/」はつけたくない方法はありませんでしょうか..?
らいさん
コメントありがとうございます。
個別ページのURLであれば、「設定 > パーマリンク設定」 で設定しているURLの末尾から「/」を除去すれば可能かと思います。
連続のコメントですみません。
カスタム投稿タイプとカスタムタクソノミー の階層(hierarchy)をともにTRUEにしていると404に飛んでしまう不具合があるようです(パーマリンクが/%postname%/の場合)。
https://www.codamac.jp/blog/custom-taxonomy-404/
これは/%postname%/をタームと勘違いして参照してしまう不具合だそうで、どちらかの階層をFALSEにしてやるか、パーマリンクに/%post_id%/を使うことで正常に動作はします。
松田拓也さん
WordPress 5.2.2で上記記事の内容を簡単に試してみましたが、不具合を確認できませんでした。
きちんと検証はできていないですが、恐らくhierarchyと合わせて他の設定内容が影響しているのかなと思います。
プラグインで特に設定を行わない場合、パーマリンクはこうでは無いですか?
一覧ページ(カスタム投稿タイプitemの投稿一覧)
http://ドメイン名/item/
個別ページ(投稿詳細)
http://ドメイン名/item/投稿名/
カテゴリー一覧ページ(カスタムタクソノミー item_catの投稿一覧)
http://ドメイン名/item_cat/ターム名/
タグ一覧ページ(カスタムタクソノミー item_tagの投稿一覧)
http://ドメイン名/item_tag/ターム名/
まつたくさん
コメントありがとうございます。
item_catとitem_tagのパーマリンクですが、rewriteでパーマリンクの設定を上書きしているので、タクソノミー名(item_cat / item_tag)ではなくslugの値(category / tag)になるかと思います。