我知道你已经找到了解决方案,因为你发现这个问题已经被问到并得到了回答。。。
然而,一旦这个问题是悬赏问题,并且不能作为重复问题关闭,我想对此做出解释,并在已经发布的答案上添加(一点)附加值。
在这些答案中做了什么one 通过@RachelCarden 而在这里发布的@matthew-boynes) 是您所需要的,但它是硬编码的,即您必须手动在过滤器功能中添加cpt存档段塞。
我想要得到的是一个以同样方式工作的过滤器,但它是友好的,类似于:
add_filter(\'wp_unique_post_slug_is_bad_hierarchical_slug\', \'prevent_slug_override\', 99, 3);
add_filter(\'wp_unique_post_slug_is_bad_flat_slug\', \'prevent_slug_override\', 99, 3);
function prevent_slug_override( $now, $slug, $type ) {
if ( in_array($type, array(\'nav_menu_item\', \'revision\', \'attachment\') ) )
return $now;
$cpts = get_post_types( array(\'_builtin\' => false), \'objects\' );
$check_bad = array();
foreach ( $cpts as $cpt => $object ) {
if ( $object->has_archive ) {
if (
! empty($object->rewrite) && isset($object->rewrite[\'slug\']) &&
! empty($object->rewrite[\'slug\']) && ($object->rewrite[\'slug\'] != $cpt)
) {
$check_bad[] = $object->rewrite[\'slug\'];
} else {
$check_bad[] = is_string($object->has_archive) ? $object->has_archive : $cpt;
}
}
}
if ( in_array($slug, $check_bad) ) return true;
return $now;
}