这个rewrite
中的参数register_post_type
是有限的,但您可以使用add_permastruct
. 附加的好处是,这将为您生成所有重写规则,新规则将覆盖原始规则。您只需确保在注册post类型后挂起。
function wpd_woo_product_permastruct(){
add_permastruct(
\'product\',
\'%product_cat%/%product%-%post_id%/\',
array(
\'walk_dirs\' => false,
\'with_front\' => false
)
);
}
add_action( \'init\', \'wpd_woo_product_permastruct\', 99 );
神奇的是,这就是你所需要的一切。重写标记替换将为您完成,因此
post_type_link
不需要过滤器。
通常,缺少静态slug会导致与其他规则发生冲突,但在这种情况下,它会起作用,因为嵌入的post ID会触发更严格的匹配。
你不能拥有的是%product_cat%
没有静态段塞的规则,这就是为什么我们必须设置walk_dirs
到false
. 否则,对根页面的任何请求都将被分类规则覆盖,WordPress将查找与页面slug匹配的术语。
如果您想要引入这种模糊性的规则,您可以执行以下操作this answer, 手动解决冲突。