我有一个需要的情况,如果我创建两个CPT页面,它们都有相同的名称和相同的slug。
例如,如果我添加两个CPT页面,这两个页面都称为“Post-Name”:
第一个slug将是“Post-Name”,第二个slug将是“Post-Name-2”。
因为我在permalink结构中添加了一个自定义部分,这将使URL唯一:
function extra_post_link( $permalink, $post, $leavename ) {
global $wp_rewrite;
if ( stripos( $permalink, \'%selected_meta%\' ) == false )
return $permalink;
if ( is_object( $post ) && ($post->post_type == \'ervaring\' || $post->post_type == \'lening\') ) {
$_selected_post_slug = \'\';
$_selected_post_id = get_post_meta( $post->ID, \'rating-post\', true );
if ( $_selected_post_id )
$_selected_post_slug = get_page_uri( $_selected_post_id );
return str_replace( \'%selected_meta%\', $_selected_post_slug, $permalink );
}
return $permalink;
}
add_filter( \'post_type_link\', \'extra_post_link\', 10, 3 );
如何防止WordPress这样做?
最合适的回答,由SO网友:birgire 整理而成
您可以考虑使用“wp\\u unique\\u post\\u slug”过滤器:
add_filter( \'wp_unique_post_slug\',\'my_disable_unique_slug\',11,6);
function disable_unique_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ){
global $post;
if($post->post_type==\'cpt\'){ // EDIT post type
$slug=$original_slug;
}
return $slug;
}
这是未经测试的,但你明白了;-)
附言:你可能需要改变其他东西才能使这项工作成功,因为独特性非常重要。