여기에 대한 답변을 살펴보면 위에서 배운 것들을 결합하고 자동 감지 및 중복 포스트 슬러그 방지를 추가하는 더 나은 솔루션을위한 공간이 있다고 생각합니다.
참고 : 아래 예제에서 CPT 이름을 'custom_post_type'으로 변경하십시오. 많은 경우가 있으며 '찾기 / 바꾸기'는 모두를 쉽게 잡을 수있는 방법입니다. 이 코드는 모두 functions.php 또는 플러그인에 있습니다.
1 단계 : 게시물을 등록 할 때 다시 쓰기를 'false'로 설정하여 사용자 정의 게시물 유형에서 다시 쓰기 비활성화
register_post_type( 'custom_post_type',
array(
'rewrite' => false
)
);
2 단계 : custom_post_type에 대한 사용자 정의 재 작성을 WordPress 재 작성 하단 에 수동으로 추가
function custom_post_type_rewrites() {
add_rewrite_rule( '[^/]+/attachment/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
add_rewrite_rule( '([^/]+)/embed/?$', 'index.php?custom_post_type=$matches[1]&embed=true', 'bottom');
add_rewrite_rule( '([^/]+)/trackback/?$', 'index.php?custom_post_type=$matches[1]&tb=1', 'bottom');
add_rewrite_rule( '([^/]+)/page/?([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&paged=$matches[2]', 'bottom');
add_rewrite_rule( '([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&cpage=$matches[2]', 'bottom');
add_rewrite_rule( '([^/]+)(?:/([0-9]+))?/?$', 'index.php?custom_post_type=$matches[1]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
}
add_action( 'init', 'custom_post_type_rewrites' );
참고 : 필요에 따라 위의 다시 쓰기를 수정 (트랙백 비활성화? 피드? 등) 할 수 있습니다. 1 단계에서 다시 쓰기를 비활성화하지 않은 경우 생성 된 '기본'다시 쓰기 유형을 나타냅니다.
3 단계 : 맞춤 게시물 유형 '예쁜'에 대한 영구 링크를 다시 만듭니다 .
function custom_post_type_permalinks( $post_link, $post, $leavename ) {
if ( isset( $post->post_type ) && 'custom_post_type' == $post->post_type ) {
$post_link = home_url( $post->post_name );
}
return $post_link;
}
add_filter( 'post_type_link', 'custom_post_type_permalinks', 10, 3 );
참고 : 사용자가 다른 게시물 유형으로 충돌하는 (중복 된) 게시물을 작성하는 것에 대해 걱정하지 않으면 페이지를 요청할 때 그 중 하나만로드 할 수있는 상황이 발생할 수 있습니다.
4 단계 : 중복 포스트 슬러그 방지
function prevent_slug_duplicates( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
$check_post_types = array(
'post',
'page',
'custom_post_type'
);
if ( ! in_array( $post_type, $check_post_types ) ) {
return $slug;
}
if ( 'custom_post_type' == $post_type ) {
// Saving a custom_post_type post, check for duplicates in POST or PAGE post types
$post_match = get_page_by_path( $slug, 'OBJECT', 'post' );
$page_match = get_page_by_path( $slug, 'OBJECT', 'page' );
if ( $post_match || $page_match ) {
$slug .= '-duplicate';
}
} else {
// Saving a POST or PAGE, check for duplicates in custom_post_type post type
$custom_post_type_match = get_page_by_path( $slug, 'OBJECT', 'custom_post_type' );
if ( $custom_post_type_match ) {
$slug .= '-duplicate';
}
}
return $slug;
}
add_filter( 'wp_unique_post_slug', 'prevent_slug_duplicates', 10, 6 );
참고 : 이렇게하면 중복 슬러그 끝에 문자열 '-duplicate'가 추가됩니다. 이 코드는이 솔루션을 구현하기 전에 중복 슬러그가 이미 존재하는 경우이를 방지 할 수 없습니다. 먼저 중복을 확인하십시오.
나는 이것도 그들에게 잘 작동하는지 보러 가면 다른 사람들의 의견을 듣고 싶습니다.