我有一个网站,在自定义邮政类型的帖子将有相同的标题。默认情况下,WordPress将在url之后添加一个数字来处理这个问题,但是我希望始终包含post id,这将使url唯一。我该怎么做?
WordPress默认值: /post-type/title-2我想要: /post-type/post_id/title
发布于 2023-04-27 15:08:09
首先,转到定义自定义post类型的地方。例如,如果我编写一个函数来定义自定义的post类型“book”,我将使用register_post_type( 'books', $args ),其中$args是一个用于配置post类型属性的数组。默认情况下,自定义post类型使用post类型键作为它们的段塞。为了定义自定义弹格,我们需要使用那个rewrite数组的$args键。在图书示例中,使用您在问题中指定的URL方案,它可能如下所示:
$args = array();
$args['rewrite'] = array(
'slug' => 'books/%post_id%'
);您可能会在rewrite数组中指定$args以外的其他参数。如果您碰巧需要更多关于它们的背景信息,请参阅寄存器_帖子_类型。
如果我们在此停止,%post_id%重写标记将显示在此post类型的所有帖子的URL中。我们想用邮政的实际身份来代替它。要做到这一点,我们连接到post_type_link过滤器。
function wpse415642_rewrite_links( $post_link, $post_obj ){
if ( 'books' == $post_obj->post_type ){
$post_link = str_replace('%post_id%', $post_obj->ID, $post_link);
}
return $post_link;
}
add_filter( 'post_type_link', 'wpse415642_rewrite_links', 10, 2 );对于一些自定义的url段塞,您必须在这里进一步注册,并将其注册为查询变量,这样WordPress就可以正确匹配URL路径。幸运的是,在默认情况下,%post_id%是一个注册的重写标记,因此我们不必这样做。但是,您应该确保在permalink设置中刷新permalinks,以便新的url方案生效。
WordPress负责产生独特的后鼻塞的部分不知道我们的新URL,所以我们必须手动告诉它不要添加"-2“风格的后缀。否则,为了继续使用图书示例,我们将有:
books/1234/count-of-monte-cristobooks/2345/count-of-monte-cristo-2两根柱子上的子弹都叫“基督山伯爵”。为了防止独特的弹状体生成,我们将其连接到pre_wp_unique_post_slug 过滤器并返回一个非空值。
function wpse415642_prevent_unique_slug( $generate_unique_slug, $slug, $id, $post_status, $post_type ){
if ( 'books' == $post_type ){
return $slug;
}
return $generate_unique_slug;
}
add_filter('pre_wp_unique_post_slug', 'wpse415642_prevent_unique_slug', 10, 5 );这将给你唯一的网址,没有任何后缀的帖子标题。
https://wordpress.stackexchange.com/questions/415642
复制相似问题