前提・実現したいこと
カスタム投稿をfunctions.php
で設定しています。
カスタム投稿のスラッグ:article
カスタム投稿のタクソノミーのスラッグ:article-cat
上記が前提条件で、テンプレートとなるファイルを、
/article/
ならarchive-article.php
、
/article/ターム名/
ならtaxonomy-article-cat.php
にしたいです。
発生している問題・エラーメッセージ
/article/
でアクセスすると、ちゃんとarchive-article.php
が読み込まれます。
ですが、/article/ターム名/
でアクセスすると、taxonomy-article-cat.php
ではなくarchive-article.php
のファイルがサイト上で表示されてしまいます。
どうすればいいでしょうか?
気になる点
functions.php
でURLをリライトしています。
これがなにかいけないのでしょうか?
カスタム投稿の記事詳細を、/article/タクソノミーのターム名/記事ID/
にしています。
(functions.phpの一部抜粋)
/** * URLリライト */ function my_custom_post_rewrite() { global $wp_rewrite; // * ↓ ↓ ↓ 複数ある場合はこの単位で複製する ↓ ↓ ↓ * $wp_rewrite->add_rewrite_tag('%article%', '(article)','post_type='); $wp_rewrite->add_permastruct('article', '/%article%/%article-cat%/%post_id%/', false); // * ↑ ↑ ↑ 複数ある場合はこの単位で複製する ↑ ↑ ↑ * } add_action('init', 'my_custom_post_rewrite'); function my_custom_posttype_permalink($post_link, $id = 0, $leavename) { global $wp_rewrite; $post_delivery = get_post($id); $post = $post_delivery; if(is_wp_error( $post )){ return $post; } // * ↓ ↓ ↓ 複数ある場合はこの単位で複製する ↓ ↓ ↓ * if('article' === $post->post_type){ $newlink = $wp_rewrite->get_extra_permastruct($post->post_type); $newlink = str_replace('%article%', $post->post_type, $newlink); $get_term = get_the_terms($post->ID, 'article-cat'); $term_name = array_shift($get_term); $term_slug = $term_name->slug; $newlink = str_replace('%article-cat%', $term_slug, $newlink); $newlink = str_replace('%post_id%', $post->ID, $newlink); $newlink = home_url(user_trailingslashit($newlink)); return $newlink; } // * ↑ ↑ ↑ 複数ある場合はこの単位で複製する ↑ ↑ ↑ * return $post_link; } add_filter('post_type_link', 'my_custom_posttype_permalink', 1, 3);
あなたの回答
tips
プレビュー