如何在两个类别下添加两个相同的鼻涕虫?

时间:2018-06-05 作者:Abdus Sattar Bhuiyan

我在c-program类别下创建了一个名为“入门”的帖子,permalink是:http://localhost/fresh/c-program/get-started/ 我想在phm计划类别下创建另一个“入门”帖子,预期permalink是:http://localhost/fresh/php-program/get-started/ 但I permalink设置为:http://localhost/fresh/php-program/get-started2/. 这两个链接是独一无二的。那为什么http://localhost/fresh/php-program/get-started/ 成为http://localhost/fresh/php-program/get-started2/?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

这种行为的原因在于wp_insert_post 作用当你看到its code, 在第3319行,您将看到这一行:

$post_name = wp_unique_post_slug( $post_name, $post_ID, $post_status, $post_type, $post_parent );
这个函数的作用是(直接来自Codex):

当给定所需的slug和一些post详细信息时,计算post的唯一slug。

它忽略了分类法。如果帖子类型是分层的,那么如果帖子有不同的父级,那么它允许相同的slug。但是,如果post类型不是分层的,那么它只会确保slug是唯一的。

这很有道理——你可以将帖子重新分配到另一个类别,这样会产生冲突。另外,默认的WP permalink结构不将类别用作URL的一部分。

但是有一种方法可以改变它(尽管有点冒险……)在该函数结束时,它返回:

return apply_filters( \'wp_unique_post_slug\', $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug );
所以你可以使用wp_unique_post_slug 钩住并修改计算的段塞。

结束