🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

Q&A

解決済

1回答

1073閲覧

カスタム投稿タイプのパーマリンクにタクソノミーのタームを含めたい

pims-tak

総合スコア39

WordPress

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

0グッド

0クリップ

投稿2019/10/30 00:26

WordPressで作成したカスタム投稿タイプのパーマリンクを以下のように変更したいと思っております。
domain/{post_type}/{post_name}

domain/{post_type}/{taxonomy_term}/{post_id}
以下コードをfunction.phpに記述することにより、期待結果は得られています。

php

1function custom_post_link( $link, $post ){ 2 if ( 'custom_post_type' === $post->post_type ){ 3 if ( $terms = get_the_terms( $post->ID, 'custom_taxonomy' ) ){ 4 $link = home_url( '/custom_post_type/' . $terms[0]->slug . '/' . $post->ID ); 5 } 6 } 7 return $link; 8} 9add_filter( 'post_type_link', 'custom_post_link', 1, 2 ); 10 11function custom_rewrite_rules_array( $rules ){ 12 $new_rules = array( 13 'custom_post_type/(.+)/(\d+)/?$' => 'index.php?post_type=custom_post_type&p=$matches[2]', 14 ); 15 return $new_rules + $rules; 16} 17add_filter( 'rewrite_rules_array', 'custom_rewrite_rules_array' );

ただ、1点気になることとして、存在しないタクソノミータームがURLに含まれていた場合も、投稿IDが正しい場合は投稿が表示されてしまいます。
例えば、ある投稿がターム「test」を持つとして、以下どちらのURLでも投稿にアクセスできてしまいます。
➀domain/custom_post_type/test/1 ←正
➁domain/custom_post_type/dummy/1 ←誤
期待結果としては➁については、404となることが望ましいです。
リライトでタクソノミータームに触れていないので当たり前といえばそうなのですが、何か方法はございますでしょうか。
よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

404を返したい + 存在しないタクソノミーネームなので
single.phpでアクセス中のURL取得して条件分岐で存在しなかったらPHPで404を返すのがいいかもしれません。

投稿2019/10/30 00:30

kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pims-tak

2019/10/30 07:53

ありがとうございます。テンプレート側で404返す方針で実装いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問