当前位置: 首页>>技术问答>>正文


永久链接:自定义帖子类型 – >自定义分类 – >岗位

webfans 技术问答 , , , 去评论

问题描述

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

我有一个名为_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_帖子,它有“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

我尽可能避免使用插件,但我愿意接受任何解决方案。

最佳解决方法

首先,register your taxonomy并将rewriteslug参数设置为shows

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

接下来,register your post type并将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 );

编辑

忘记上面的register_post_typehas_archive参数,应该设置为shows

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2070.html,转载请务必附带本地址声明。