私はWordPressの書き換え規則の処理に問題があり、助けを借りることができます。
_shows_
というカスタム投稿タイプがあります。
すべての shows には、単一のカスタム分類カテゴリがあります_show-category_.
_show_
は、複数の_show-category_
を持つことはありません。
私のURLはこのようにしてルーティングしたいと思います。
www.mysite.com/shows/ => archive-shows.php
www.mysite.com/shows/%category%/ => taxonomy-show-category.php
www.mysite.com/shows/%category%/%postname%/ => single-shows.php
実世界の例として、_show-category_
"Foo"と_show_
として "Foo"を含む "Bar"という_show-category_
投稿があるとしましょう。私のWordPressアプリは次のようになるはずです。
www.mysite.com/shows/foo/ => shows all posts under the foo category
www.mysite.com/shows/foo/bar => shows the indivual post
可能な限り私はプラグインを避けようとしますが、どんな解決策にも自由です。
まず、 分類法を登録して そしてslug
のrewrite
引数をshows
に設定します。
register_taxonomy(
'show_category',
'show',
array(
'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
// your other args...
)
);
次に、 投稿タイプを登録します そして、スラッグをshows/%show_category%
に設定し、has_archive
引数をshows
に設定します。
register_post_type(
'show',
array(
'rewrite' => array( 'slug' => 'shows/%show_category%', 'with_front' => false ),
'has_archive' => 'shows',
// your other args...
)
);
最後に、post_type_link
にフィルタを追加して、個々のショーパーマリンクのショーカテゴリを置き換えます。
function wpa_show_permalinks( $post_link, $post ){
if ( is_object( $post ) && $post->post_type == 'show' ){
$terms = wp_get_object_terms( $post->ID, 'show_category' );
if( $terms ){
return str_replace( '%show_category%' , $terms[0]->slug , $post_link );
}
}
return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );
_編集_
上記のhas_archive
のregister_post_type
引数を忘れたため、shows
に設定する必要があります。