Wyrejestruj niestandardowe typy postów


44

Czy ktoś zna sposób na wyrejestrowanie niestandardowych typów postów?

Czy istnieje odpowiednik register_post_type()?


1
DOWOLNE JEDNE SZUKANIE TO. Po zarejestrowaniu niestandardowego typu postu nic nie jest zapisywane w bazie danych. Tabela posty w db db jest nieustrukturyzowana. Jest to jedyna rejestracja w wewnętrznych elementach skryptu wp, że można utworzyć wpis w tabeli postów z typem tego, co kiedykolwiek utworzono za pomocą wpisów w rejestrze. Mam nadzieję, że to pomoże komuś innemu.
MageProspero

2
Począwszy od WordPress 4.5 jest do tego funkcja unregister_post_type. Zobacz Wyrejestruj typ wpisu za pomocą unregister_post_type
Dhinju Divakaran

Odpowiedzi:


38

Obecnie nie ma funkcji wyrejestrowywania typu postu, proces ten jest jednak dość prosty.

Andrew Nacin podał trochę kodu na trac, znaleziony tutaj i opublikowany poniżej.

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;

Wyrejestrowanie wbudowanego typu posta będzie miało nieznany wpływ na WordPress, więc zrób to na własne ryzyko. Wyrejestrowanie niestandardowego typu postu powinno być całkowicie bezpieczne, ale oczywiście nie spowoduje oczyszczenia instalacji (tzn. Wyrejestrowanie typu postu nie oznacza usunięcia danych z bazy danych).

Mogę sobie wyobrazić kilka scenariuszy, w których może to być wymagane, ale bardziej rozsądnym podejściem (tam, gdzie to możliwe) byłoby po prostu nie rejestrowanie typu postu, jeśli nie jest to pożądane.


2
Nie ma za co .. :) Jeśli dodajesz własne typy postów w formie kodu, łatwiejszym rozwiązaniem byłoby po prostu usunięcie uruchomionej funkcji / kodu, który je dodaje. Pamiętaj też, że usunięcie typów postów nie usuwa ich z tabeli postów, więc w tej tabeli mogą występować zbędne wpisy.
t31os

2
@anu: Jedyną rzeczą, która pozostaje „stała”, jeśli nie wykonasz register_post_type()load na każdej stronie ( init), jest prawdopodobnie struktura permalink (odśwież ją i zniknie) oraz posty w bazie danych, które możesz usunąć robiąc DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry,

Co ciekawe, usunąłem kod register_post_type dla tego niestandardowego typu post_post i nie dodałem żadnych postów do tego cpt, ale nie usunąłem interfejsu administratora.
anu

Lub oczywiście, teraz, gdy spróbuję ponownie, działa tak, jak opisaliście - tj. Interfejs administratora nowego cpt zniknął. Prawdopodobnie ja jestem muppetem :) Przydatne informacje, więc dziękuję.
anu

3
Aktualizacja w lutym 2016 r. - ta funkcja została połączona z rdzeniem dla WP 4.5.0 (premiera nastąpi w kwietniu).
Ricardo BRGWeb

37

Jak WordPress 4.5 jest funkcja tego robić, unregister_post_type. Przykład:-

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

to musi mieć wyższy priorytet niż ten użyty do zarejestrowania typu postu, w przeciwnym razie nie zadziała
Mark Kaplun

@Dhinju Divakaran nie usuwa starego typu posta z db, którego nie używam teraz.
Faiyaz Alam

działa, upewnij się, że nadajesz temu działaniu wysoki priorytet w porównaniu z działaniem użytym do zarejestrowania typu posta.
Ajith R Nair

1
Warto wspomnieć, że unregister_post_type()niczego nie usuwa z bazy danych. Zapobiega tylko rejestracji typu postu.
Dave Romsey

Działa to dla mnie świetnie, ale pamiętaj, że musisz poinformować WordPress o zmianie, ponownie zapisując strukturę Permalink na stronie Ustawienia -> Permalinks. W przeciwnym razie strony ze sprzecznymi permalinkami nie będą działały poprawnie.
MarkPraschan

7

To działało dla mnie, jak powiedział Rarst, jeśli to możliwe, za pomocą remove remove () .

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

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

5

Jak zauważył t31os, łatwo jest usunąć typ postu ze zmiennej globalnej.

Ale jeśli masz na myśli nie-rdzeniowy typ postu, lepiej byłoby wyszukać kod, który go rejestruje i odczepić remove_action()(jeśli jest to porządny kod, należy go zaczepić, a nie uruchamiać bezpośrednio).


2
register_post_type()nie jest funkcją, która dobrze nadaje się do zaczepiania. Normalnym sposobem rejestrowania typu postu jest uruchomienie funkcji bezpośrednio w funkcji zaczepionej na init. Usunięcie tej akcji może mieć niepożądane skutki, ponieważ z tą funkcją często będą usuwane inne funkcje.
John P Bloch,

@John P Bloch tak, jestem tego świadomy. Czasami kończy się przebudowywanie wszystkich init, aby wszystko
działało

1

W WordPress w wersji 4.5 i nowszych zapewniają one funkcję usuwania typu postu (unregister_post_type). Przykład

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

To zadziała zdecydowanie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.