这种行为的原因在于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
钩住并修改计算的段塞。