我有一个名为
_shows_
的自定义帖子类型。所有节目都具有一个自定义分类类别
_show-category_.
一个_show_
永远不会有多个_show-category_
。我希望自己的网址以这种方式进行路由:
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”和一个标题为“ Bar”的_show_
帖子,其_show-category_
带有“ Foo”。我希望我的WordPress应用程序看起来像这样:www.mysite.com/shows/foo/ => shows all posts under the foo category
www.mysite.com/shows/foo/bar => shows the indivual post
我尽可能地避免使用插件,但是可以使用任何解决方案。
#1 楼
首先,注册您的分类法并将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 );
EDIT
忘记了上面
has_archive
的register_post_type
参数,应将其设置为shows
。评论
如果要更改现有的WordPress实例,请确保转到“设置”>“永久链接”,然后单击“保存”。您对functions.php所做的更改只有在您生效后才会生效。
–杰伊·尼利(Jay Neely)
16年5月5日,0:14
这几乎对我有用,因为分类法显示在帖子类型页面上,/ post_type / taxonomy /是合法页面(以前是404),但是我的/ post_type / taxonomy / post是404。我在注册“ show_category”和“ show”上方的分类法时注意到,尽管只有show_category是分类法。我只注册分类法。
–justinavery
16-09-28在7:16
@Milo有什么办法可以使它与显示/税/税/后税等次级税一起使用?
–贝恩
17年1月26日14:22
我非常希望这对我也能起作用,但是每个单数都以404结尾。
–蜜蜂
19年3月2日在16:39
正如其他用户评论的那样,我在单个节目帖子页面上遇到了相同的404问题,但是可以通过添加add_rewrite_rule('shows /([^ /] +)/([^ /] +)','index .php?show = $ matches [2]','top');对我的职能。这将使“ show”之后的第二个子弹部分与show post名称相匹配。
–萨拉
20年1月8日在13:31
评论
只是将您指向我之前必须做的事情.. wordpress.stackexchange.com/questions/102246 / ...