1つのカスタム投稿タイプ(projects)を作成し、その中で2つのカスタムタクソノミーを作成しました。
1つはカテゴリーのように、もう1つはタグのように使用をしています。
どちらのカスタムタクソノミーにおいてもアーカイブページを作成したいと思っているのですが、リライトの方法がわからずつまづいてしまいました。
カスタム投稿タイプ
projects
カスタムタクソノミーA
projects_cat
カスタムタクソノミーB
projects_tag
目標
タームのアーカイブページの完成形のURLとして
/projects/ターム名/
記事詳細ページの完成形のURLとして
/projects/カスタムタクソノミーAのターム名/記事タイトル
を目指しています。
記事詳細ページに関しては
プラグインの
Custom Post Type Permalinks
を使用し、
/projects/%projects_cat%/%postname%/
カスタマイズされたカスタムタクソノミーのパーマリンクを使用する
にチェックを入れています。
アドバイスをもらえると幸いです。よろしくお願いいたします。
カスタム投稿タイプとカスタムタクソノミーの追加
php
1function cpt_register_projects() { //add_actionの2つのパラメーターを定義 2 $labels = [ 3 "singular_name" => "projects", 4 "edit_item" => "projects", 5 ]; 6 $args = [ 7 "label" => "設計実績", //管理画面に出てくる名前 8 "labels" => $labels, 9 "description" => "", 10 "public" => true, 11 "show_in_rest" => true, 12 "rest_base" => "", 13 "rest_controller_class" => "WP_REST_Posts_Controller", 14 "has_archive" => true, 15 "delete_with_user" => false, 16 "exclude_from_search" => false, 17 "map_meta_cap" => true, 18 "hierarchical" => true, 19 "query_var" => true, 20 "rewrite" => [ "with_front" => false ], 21 // 'rewrite' => true, 22 "menu_position" => 5, 23 "supports" => [ "title", "editor", "thumbnail" ], 24 ]; 25 26 register_taxonomy( 27 'projects_cat', 28 'projects', 29 array( 30 'hierarchical' => true, 31 'update_count_callback' => '_update_post_term_count', 32 'label' => '設計実績カテゴリー', 33 'public' => true, 34 'show_ui' => true, 35 'show_in_rest' => true, 36 'meta_box_cb' => 'post_categories_meta_box', 37 // 'rewrite' => array('slug' => 'projects','with_front' => true,'hierarchical' => true ), 38 'rewrite' => array( 'hierarchical' => true ), 39 'query_var' => true, 40 'has_archive' => true, 41 'show_admin_column'=> true, 42 ) 43 ); 44 45 register_taxonomy( 46 'projects_tag', 47 'projects', 48 array( 49 'label' => '設計実績タグ', 50 'update_count_callback' => '_update_post_term_count', 51 'show_ui' => true, 52 'hierarchical' => false, 53 'public' => true, 54 'show_in_rest' => true, 55 'meta_box_cb' => 'post_categories_meta_box', 56 // 'rewrite' => array( 'slug' => 'projects','with_front' => true,'hierarchical' => true ), 57 'rewrite' =>true, 58 'query_var' => true, 59 'has_archive' => true, 60 'show_admin_column'=> true, 61 ) 62 ); 63 64 register_post_type( "projects", $args ); 65 66} 67add_action( 'init', 'cpt_register_projects' );
リライト
php
1function add_custom_rewrite_rules() { 2 add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat', 'top'); 3 add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat&paged=$matches[2]', 'top'); 4 // add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag', 'top'); 5 // add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag&paged=$matches[2]', 'top'); 6} 7add_action('init', 'add_custom_rewrite_rules');
どちらのタクソノミーもスラッグをprojectsと書き換えているため、上記の方法だとカテゴリーのみアーカイブページが作成できタグではできない。
また、コメントアウトしている下2行を記載すると、上書きされているのかタグアーカイブは表示されるが、カテゴリーのアーカイブが作成できなくなります。
よろしくお願いいたします。
2022/6/13追記
php
1function add_custom_rewrite_rules($termlink, $term, $taxonomy) { 2 return str_replace('/'.$taxonomy.'/', '/', $termlink); 3} 4add_filter('term_link', 'add_custom_rewrite_rules',11,3); 5 6$url = $_SERVER['REQUEST_URI']; 7 if(strstr($url, 'ターム名1') || strstr($url,'ターム名2') || strstr($url,'ターム名3') ){ 8 add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat', 'top'); 9 add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat&paged=$matches[2]', 'top'); 10 } 11 else{ 12 add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag', 'top'); 13 add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag&paged=$matches[2]', 'top'); 14 }
6/18追記→解決しました
上記色々触っていましたが、なかなか解決できず、表示されないパターンが見つかりました。
参考にさせていただいたものがこちらの2点になります。
https://100webdesign.jp/services/wordpress/wp_result/wp_result-221/
https://libre-co.com/wordpress/custom_taxonomy_permalink/
簡単に説明させていただきますと
カスタムタクソノミーのスラッグをprojects_catからprojectsに書き換えをする方法、
/projects/projects_cat/ターム名と表示させるようにし、functions.phpにてprojects_catを消す方法です。
パターンとして、カスタムタクソノミーAの記事一覧が表示されると、記事詳細ページが表示できない。
記事詳細ページが表示されると、カスタムタクソノミーの記事一覧が表示されない。
状況です。
一旦、カスタムタクソノミーBの方はパーマリンクをprojects_tagとして表示させ、干渉しないようにしています。
※こちらは
記事詳細ページの完成形のパーマリンクの設定を
/projects/カスタムタクソノミーAのターム名/記事タイトル
から
/projects/カスタムタクソノミーAのターム名/記事id
に変更することで解決いたしました。

回答2件
あなたの回答
tips
プレビュー