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となることが望ましいです。
リライトでタクソノミータームに触れていないので当たり前といえばそうなのですが、何か方法はございますでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/30 07:53