質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

解決済

【WordPress】1つのカスタム投稿タイプに2つのカスタムタクソノミーを追加しアーカイブページを作成

monchan58
monchan58

総合スコア10

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

2回答

0評価

0クリップ

293閲覧

投稿2022/06/09 15:43

編集2022/06/21 02:15

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

function cpt_register_projects() { //add_actionの2つのパラメーターを定義 $labels = [ "singular_name" => "projects", "edit_item" => "projects", ]; $args = [ "label" => "設計実績", //管理画面に出てくる名前 "labels" => $labels, "description" => "", "public" => true, "show_in_rest" => true, "rest_base" => "", "rest_controller_class" => "WP_REST_Posts_Controller", "has_archive" => true, "delete_with_user" => false, "exclude_from_search" => false, "map_meta_cap" => true, "hierarchical" => true, "query_var" => true, "rewrite" => [ "with_front" => false ], // 'rewrite' => true, "menu_position" => 5, "supports" => [ "title", "editor", "thumbnail" ], ]; register_taxonomy( 'projects_cat', 'projects', array( 'hierarchical' => true, 'update_count_callback' => '_update_post_term_count', 'label' => '設計実績カテゴリー', 'public' => true, 'show_ui' => true, 'show_in_rest' => true, 'meta_box_cb' => 'post_categories_meta_box', // 'rewrite' => array('slug' => 'projects','with_front' => true,'hierarchical' => true ), 'rewrite' => array( 'hierarchical' => true ), 'query_var' => true, 'has_archive' => true, 'show_admin_column'=> true, ) ); register_taxonomy( 'projects_tag', 'projects', array( 'label' => '設計実績タグ', 'update_count_callback' => '_update_post_term_count', 'show_ui' => true, 'hierarchical' => false, 'public' => true, 'show_in_rest' => true, 'meta_box_cb' => 'post_categories_meta_box', // 'rewrite' => array( 'slug' => 'projects','with_front' => true,'hierarchical' => true ), 'rewrite' =>true, 'query_var' => true, 'has_archive' => true, 'show_admin_column'=> true, ) ); register_post_type( "projects", $args ); } add_action( 'init', 'cpt_register_projects' );

リライト

php

function add_custom_rewrite_rules() { add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat', 'top'); add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat&paged=$matches[2]', 'top'); // add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag', 'top'); // add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag&paged=$matches[2]', 'top'); } add_action('init', 'add_custom_rewrite_rules');

どちらのタクソノミーもスラッグをprojectsと書き換えているため、上記の方法だとカテゴリーのみアーカイブページが作成できタグではできない。
また、コメントアウトしている下2行を記載すると、上書きされているのかタグアーカイブは表示されるが、カテゴリーのアーカイブが作成できなくなります。

よろしくお願いいたします。

2022/6/13追記

php

function add_custom_rewrite_rules($termlink, $term, $taxonomy) { return str_replace('/'.$taxonomy.'/', '/', $termlink); } add_filter('term_link', 'add_custom_rewrite_rules',11,3); $url = $_SERVER['REQUEST_URI']; if(strstr($url, 'ターム名1') || strstr($url,'ターム名2') || strstr($url,'ターム名3') ){ add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat', 'top'); add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_cat=$matches[1]&taxonomy=projects_cat&paged=$matches[2]', 'top'); } else{ add_rewrite_rule('projects/([^0-9]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag', 'top'); add_rewrite_rule('projects/([^0-9]+)/page/([^/]+)/?$', 'index.php?projects_tag=$matches[1]&taxonomy=projects_tag&paged=$matches[2]', 'top'); }

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
に変更することで解決いたしました。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

monchan58

2022/06/12 16:30

2022/6/13追記いたしました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。