맞춤 게시물 유형 등록 해제


44

맞춤 게시물 유형을 등록 취소하는 방법을 아는 사람이 있습니까?

에 해당 register_post_type()하는가?


1
이 중 하나만 검색하십시오. 사용자 정의 게시 유형을 등록하면 데이터베이스에 아무것도 저장되지 않습니다. wp db의 posts 테이블은 구조화되어 있지 않습니다. wp 스크립트의 내부에만 등록하면 등록 게시물로 작성한 항목의 유형으로 게시물 테이블에 항목을 작성할 수 있습니다. 희망은 다른 사람에게 도움이됩니다.
MageProspero

2
WordPress 4.5부터는이를 수행하는 기능이 unregister_post_type있습니다. 참조 등록 취소에게 포스트 유형 사용 unregister_post_type
Dhinju Divakaran

답변:


38

현재 게시물 유형을 등록 취소하는 기능은 없지만 프로세스는 매우 간단합니다.

Andrew Nacin은 trac에 대한 코드를 제공했으며 여기에 있으며 아래에 게시되었습니다.

if ( ! function_exists( 'unregister_post_type' ) ) :
function unregister_post_type( $post_type ) {
    global $wp_post_types;
    if ( isset( $wp_post_types[ $post_type ] ) ) {
        unset( $wp_post_types[ $post_type ] );
        return true;
    }
    return false;
}
endif;

기본 제공 게시물 유형을 등록 취소하면 WordPress에 알 수없는 영향이 있으므로 위험을 감수하십시오. 사용자 정의 게시물 유형을 등록 취소하는 것은 완벽하게 안전해야하지만 설치시 자연스럽게 정리하지는 않습니다 (즉, 게시물 유형을 등록 취소해도 데이터베이스에서 데이터를 제거하는 것과 동일하지 않습니다).

이것이 필요할 수있는 몇 가지 시나리오를 상상할 수 있지만 더 합리적인 접근 방식은 가능한 경우 게시물 유형을 원하지 않는 경우 처음에 등록하지 않는 것입니다.


2
환영합니다 .. :) 코드 형식으로 고유 한 게시물 유형을 추가하는 경우 더 쉬운 해결책은 실행하는 기능 / 코드를 제거하여 추가하는 것입니다. 또한 게시물 유형을 제거해도 게시물 테이블에서 삭제되지 않으므로 해당 테이블에 중복 항목이있을 수 있습니다.
t31os

2
@anu : register_post_type()각 페이지로드 ( init)를 실행하지 않으면 "영구적"으로 유지되는 유일한 것은 아마도 영구 링크 구조 (새로 고침과 사라질 것입니다)와 데이터베이스의 게시물입니다. 에 의해 DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry

흥미롭게도 해당 custom_post_type에 대한 register_post_type 코드를 제거했으며 해당 cpt에 게시물을 추가하지 않았지만 관리 UI는 제거하지 않았습니다.
anu

또는 이제 다시 시도해 보았으므로 설명 된대로 작동합니다. 즉 새 cpt의 관리 UI가 사라졌습니다. 어쩌면 나는 도련님 :) 유용한 정보, 어쨌든 감사합니다.
anu

3
2016 년 2 월 업데이트-이 기능은 WP 4.5.0 (4 월에 출시 예정)의 핵심 기능으로 통합되었습니다.
Ricardo BRGWeb

37

WordPress 4.5부터는 기능이 있습니다 unregister_post_type. 예:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');

이것은 포스트 타입을 등록하는 데 사용 된 것보다 우선 순위가 높아야합니다. 그렇지 않으면 작동하지 않습니다
Mark Kaplun

@ Dhinju Divakaran 그것은 지금 사용하지 않는 db에서 오래된 게시물 유형을 삭제하지 않습니다.
Faiyaz Alam

해당 게시물 유형을 등록하는 데 사용되는 작업과 비교하여이 작업에 우선 순위를 두어야합니다.
Ajith R Nair

1
unregister_post_type()데이터베이스에서 아무것도 삭제하지 않는다는 것은 언급 할 가치가 있습니다. 게시물 유형이 등록되지 않도록 방지합니다.
Dave Romsey

이것은 나에게 도움이되었지만 설정-> Permalinks 관리 페이지에서 Permalink 구조를 다시 저장하여 WordPress에 변경 사항을 알려 주어야한다는 것을 명심하십시오. 그렇지 않으면 충돌하는 영구 링크가있는 페이지가 제대로 작동하지 않습니다.
MarkPraschan

7

Rarst 가 가능한 경우 remove_action ()을 사용한다고 말했듯이 이것은 나를 위해 일했습니다 .

add_action( 'after_setup_theme','remove_foundation_options', 100 );

function remove_foundation_options() {   
    remove_action( 'init', 'Orbit');    
}

5

t31os가 언급했듯이 전역 변수에서 게시물 유형을 쉽게 제거 할 수 있습니다.

그러나 코어가 아닌 게시물 유형을 의미하는 경우 등록하고 코드를 연결 해제하는 코드를 찾는 것이 좋습니다 remove_action().


2
register_post_type()훅킹에 잘 어울리는 기능은 아닙니다. 포스트 타입을 등록하는 일반적인 방법은 init에 연결된 함수에서 함수를 직접 실행하는 것입니다. 해당 기능으로 다른 기능이 제거되는 경우가 많으므로 해당 작업을 제거하면 원하지 않는 결과가 발생할 수 있습니다.
John P Bloch

@ 존 피 블로흐, 그렇습니다. 때때로 당신은 그것을 올바르게하기 위해 모든 init를 재 구축하게됩니다. 결국 그것은 특정 코드와 그 품질 / 위생에 달려 있습니다
Rarst

1

WordPress 버전 4.5 이상에서는 게시물 유형 (unregister_post_type)을 제거하는 기능을 제공합니다.

function delete_post_type(){
unregister_post_type( 'jobs' );
}
add_action('init','delete_post_type');

확실히 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.