我在处理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_帖子,其_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


我尽可能地避免使用插件,但是可以使用任何解决方案。

评论

只是将您指向我之前必须做的事情.. wordpress.stackexchange.com/questions/102246 / ...

#1 楼

首先,注册您的分类法并将slugrewrite参数设置为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_archiveregister_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