解决这个问题花了一些时间,但我已经解决了。
不建议为重写slug传递“/”,因为它会导致比解决问题更多的问题,就像在本例中一样,会在其他页面中导致404错误。
因此,移除它是第一步。
接下来,我必须在我的函数中编写以下代码。php’:
要删除已发布帖子中的slug,请执行以下操作:
/**
* Remove the slug from published post permalinks. Only affect our CPT though.
*/
function sh_remove_cpt_slug( $post_link, $post, $leavename ) {
if ( in_array( $post->post_type, array( \'my_cpt1\' ) )
|| in_array( $post->post_type, array( \'my_cpt2\' )
|| \'publish\' == $post->post_status )
$post_link = str_replace( \'/\' . $post->post_type . \'/\', \'/\', $post_link );
return $post_link;
}
add_filter( \'post_type_link\', \'sh_remove_cpt_slug\', 10, 3 );
这仍然会导致错误,因为它指定只有“post”和“page”post类型可以有url而没有post类型slug。
现在要告诉WP,out CPT也会有URL而没有slug,我们需要在函数中实现这一点。php:
function sh_parse_request( $query ) {
// Only loop the main query
if ( ! $query->is_main_query() ) {
return;
}
// Only loop our very specific rewrite rule match
if ( 2 != count( $query->query )
|| ! isset( $query->query[\'page\'] ) )
return;
// \'name\' will be set if post permalinks are just post_name, otherwise the page rule will match
if ( ! empty( $query->query[\'name\'] ) ) {
$query->set( \'post_type\', array( \'my_cpt1\',\'my_cpt2\' ) );
}
}
add_action( \'pre_get_posts\', \'sh_parse_request\' );