Post type Permalink

时间:2017-06-17 作者:HamidReza Abdipour

我创建自定义帖子类型:

$rewrite = array(
    \'slug\'                  => \'%categories%\',
    \'with_front\'            => false,
    \'pages\'                 => true,
    \'feeds\'                 => true,
);
$args = array(
     // ...Other options
    \'taxonomies\'            => array( \'categories\' ),
    \'hierarchical\'          => false,
    \'public\'                => true,
    \'has_archive\'           => \'applications\',      
    \'publicly_queryable\'    => true,
    \'rewrite\'               => $rewrite,
    // Other options...
);
register_post_type( \'applications\', $args );
分类法:

$args = array(
     // ...Other options
    \'hierarchical\'               => true,
    \'public\'                     => true,
     // Other options...
);
register_taxonomy( \'categories\', array( \'applications\' ), $args );
此函数用于将层次分类slug添加到post url:

function remove_cpt_slug( $post_link, $post ) {

    if ( \'applications\' != $post->post_type || \'publish\' != $post->post_status || strpos($post_link, \'%categories%\') === FALSE) {
        return $post_link;
    }
    $terms = wp_get_object_terms( get_the_ID(), \'categories\', array( \'fields\' => \'slugs\' ) );

    if ( !is_wp_error($terms) && !empty($terms) ){
            $taxurl = implode(\'/\', $terms );
    } else {
        return str_replace( \'%categories%/\', \'\', $post_link );
    }
    return str_replace( \'%categories%\', $taxurl , $post_link );

}
add_filter( \'post_type_link\', \'remove_cpt_slug\', 10, 2 );
add_filter( \'post_link\', \'remove_cpt_slug\', 10, 2 );
正如我所料,现在为帖子生成了永久链接。但它们重定向到postname结构,并得到404未找到错误。

domain.com/game/puzzle/desert-storm/ will redirect to domain.com/desert-storm/
(任何更改后,我保存永久链接设置-刷新重写)

如何防止此重定向?解决404问题?

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

CPT的slug不能是动态的(实际上没有slug可以),因为wordpress需要在处理请求的早期就知道如何解析URL。您可能会改变行为,但最终只会得到相同的结果,即即使您实现自己的解析,slug也必须保持不变。

这就是为什么你remove_cpt_slug 生成所需的url,但wordpress无法正确处理。

结束

相关推荐

Change Taxonomy Permalinks

我有自定义帖子,我创建了一个显示所有自定义帖子的页面。示例:www.example.com/archive-page我想知道是否可以更改与此自定义帖子相关的类别和标签的永久链接。现在我有:www.example.com/my-custom-post-type-cats/my-category-1www.example.com/my-custom-post-type-tags/my-tag-1</我想要这样的东西:www.example.com/archive-page?category=1www.e