固定链接:自定义帖子类型->自定义分类->发布


39

我在使用WordPress重写规则时遇到麻烦,可以使用一些帮助。

我有一个名为的自定义帖子类型_shows_

所有节目都有一个自定义分类法类别_show-category_.A,_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”和一个_show_标题为“ Bar” 的帖子,其原样是“ Foo” _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

我会尽量避免使用插件,但是可以接受任何解决方案。


1
只是指着你的东西我以前做.. wordpress.stackexchange.com/questions/102246/...
reikyoushin

Answers:


70

首先,注册您的分类法,并将的slug参数设置rewriteshows

register_taxonomy(
    'show_category',
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
        // your other args...
    )
);

接下来,注册您的帖子类型,并将slug设置为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


1
米洛,谢谢!post_type_link过滤器是我所缺少的。任何阅读此线程时遇到相同问题的人,唯一需要注意的是wpa_show_permalinks函数有一个小错误,其中$ post-> post_type =='show'实际上应该是'shows'。再次感谢Milo!
Paul T

4
如果要对现有的WordPress实例进行更改,请确保转到“设置”>“永久链接”,然后单击“保存”。您对functions.php所做的更改只有在您生效后才会生效。
杰·尼利

2
这几乎对我有用,因为分类法显示在帖子类型页面上,/ post_type / taxonomy /是合法页面(以前是404),但是我的/ post_type / taxonomy / post是404'ing。在注册“ show_category”和“ show”上方的分类法时,我注意到,即使只有show_category是该分类法,也已注册。我只注册分类法。
justinavery

4
@Milo有什么办法可以使它与显示/税/税/后税等次级税一起使用?
本恩

2
我愿意,这会为我工作很好,但在每404两端奇异....
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.