前提・実現したいこと
固定ページのスラッグと、タームのスラッグを同一にして
固定ページを優先して表示させたいです。
具体的に
https://example.com/typeA
という固定ページと
https://example.com/typeA/postA
というカスタム投稿で投稿された記事があります。
カスタム投稿で投稿された記事の
typeA
は、カスタム投稿のタクソノミーのタームで設定しています。
つまり
https://example.com/ターム/投稿名
になっています。
ターム名スラッグと固定ページのスラッグが同じです。
このとき、
https://example.com/typeA/postA
にアクセスすると固定ページの
https://example.com/typeA
にリダイレクトされます。
しかしリンクは
https://example.com/typeA/postA
のままです。
https://example.com/typeA/postA
リダイレクトされないように、記事ページを表示する方法を探しています。
問題はどこにあるかおわかりの方がいらっしゃいましたら、ご教示頂きたいです。
カスタム投稿タイプのURLを消し、タームを挿入したコードは下記です
こちらから頂きました。ブログのママ掲載していますので「typeA」などの表記が違います。
https://blog.cror.net/custom-permalink.html
php
1<?php 2function myposttype_rewrite() { 3 global $wp_rewrite; 4 5 $queryarg = 'post_type=blog&name='; 6 $wp_rewrite->add_rewrite_tag('%blog_postname%', '([^/]+)', $queryarg); 7 $wp_rewrite->add_permastruct('blog', '/blog/%blog-term%/%blog_postname%.html', false); 8} 9add_action('init', 'myposttype_rewrite'); 10 11function myposttype_permalink($post_link, $id = 0, $leavename) { 12 global $wp_rewrite; 13 $post = &get_post($id); 14 if ( is_wp_error( $post ) ) 15 return $post; 16 $newlink = $wp_rewrite->get_extra_permastruct($post->post_type); 17 $newlink = str_replace('%'.$post->post_type.'_postname%', $post->post_name, $newlink); 18 $newlink = home_url(user_trailingslashit($newlink)); 19 return $newlink; 20} 21add_filter('post_type_link', 'myposttype_permalink', 1, 3); 22 23function custom_term_link( $post_link, $id = 0 ) { 24 $post = get_post($id); 25 if ( is_wp_error($post) || 'blog' != $post->post_type || empty($post->post_name) ) 26 return $post_link; 27 28 $terms = get_the_terms($post->ID, 'blog-term'); 29 if( is_wp_error($terms) || !$terms ) { 30 $term_slug = 'uncategorised'; 31 } else { 32 $term_obj = array_pop($terms); 33 $term_slug = $term_obj->slug; 34 } 35 return home_url(user_trailingslashit( "blog/$term_slug/$post->post_name.html" )); 36} 37add_filter( 'post_type_link', 'custom_term_link' , 1, 3 ); 38?>
ヒントになりそうなこと
リライトルールがおかしいのかなとは思っています。
あと
https://example.com/typeC
の固定ページない状態で
https://example.com/typeC(ターム)/postA(投稿)
を作るとnot foundになります。
スラッグを同じにするのは禁忌なのはわかりますが、子ページの仕組みから言えばできるのでは?と思っています。
タームは後で自由に増減したいので、タームのスラッグ名をfunctionに書き込むことはできれば避けたいです。
お手数ですが、かなり悩んでわかりません。ご教示頂ければ嬉しいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。