问题描述

我正在使用的网站使用以下”pretty” 永久链接结构:

http://example.com/blog/my-special-post

但是对于自定义的帖子类型,我的客户端希望避免使用”pretty” slug:

http://example.com/product/142

如何使用帖子 ID 代替自定义帖子类型的插件?

我相信这可能是使用 WP_Rewrite,但我不知道从哪里开始。

最佳解决方案

这是我用来重写具有帖子 ID 的自定义帖子类型的 URL 。您需要重写规则来翻译 URL 请求,以及 post_type_link 上的过滤器,以便为 get_post_permalink()的任何调用返回正确的 URL:

add_filter('post_type_link', 'wpse33551_post_type_link', 1, 3);

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == 'product' ){
        return home_url( 'product/' . $post->ID );
    } else {
        return $link;
    }
}

add_action( 'init', 'wpse33551_rewrites_init' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        'product/([0-9]+)?$',
        'index.php?post_type=product&p=$matches[1]',
        'top' );
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。