Dezînregistrare tipuri personalizate de postări
Știe cineva o modalitate de a dezînregistra tipurile personalizate de postări?
Există un echivalent pentru register_post_type()
?

Începând cu WordPress 4.5 există o funcție pentru a face acest lucru, unregister_post_type
. Exemplu:-
function delete_post_type(){
unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');

acest lucru trebuie să aibă o prioritate mai mare decât cea folosită pentru înregistrarea tipului de postare, altfel nu va funcționa

@Dhinju Divakaran nu șterge vechiul tip de postare din baza de date pe care nu îl mai folosesc acum.

funcționează, asigură-te că acțiunii îi dai o prioritate mai mare în comparație cu acțiunea folosită pentru înregistrarea tipului de postare.

Merită menționat că unregister_post_type()
nu șterge nimic din baza de date. Doar împiedică înregistrarea tipului de postare.

În prezent, nu există o funcție pentru dezînregistrarea unui tip de postare, însă procesul este destul de simplu.
Andrew Nacin a furnizat un cod pe trac, găsit aici și postat mai jos.
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;
Dezînregistrarea unui tip de postare încorporat poate avea efecte necunoscute asupra WordPress, așa că faceți acest lucru pe propriul risc. Dezînregistrarea unui tip de postare personalizat ar trebui să fie perfect sigură, dar în mod natural nu va efectua nicio curățare în instalarea dvs. (adică dezînregistrarea unui tip de postare nu echivalează cu eliminarea datelor din baza de date).
Îmi pot imagina câteva scenarii în care acest lucru ar putea fi necesar, dar abordarea mai sensibilă (acolo unde este posibil) ar fi să nu înregistrați tipul de postare de la bun început dacă nu este dorit.

Cu plăcere.. :) Dacă adăugați propriile tipuri de postări în formă de cod, soluția mai simplă ar fi să eliminați pur și simplu funcția/codul pe care îl rulați pentru a le adăuga. De asemenea, rețineți că eliminarea tipurilor de postări nu le elimină din tabela postărilor, așa că s-ar putea să aveți intrări redundante în acea tabelă.

@anu: Singurul lucru care rămâne "permanent" dacă nu executați register_post_type()
la fiecare încărcare de pagină (init
) este probabil structura permalink-ului (reîmprospătați-o și va dispărea), și postările din baza de date, pe care le puteți elimina executând DELETE FROM wp_posts WHERE post_type = '[your custom post type]'
.

Interesant, am eliminat codul register_post_type pentru acel custom_post_type și nu adăugasem nicio postare în acel cpt, dar nu a eliminat interfața de administrare.

Bineînțeles, acum când încerc din nou, funcționează așa cum ați descris voi - adică interfața de administrare pentru noul CPT a dispărut. Probabil am fost eu neatent :) Oricum, informații utile, așa că mulțumesc.

Actualizare în februarie 2016 - această funcție a fost integrată în nucleul WordPress pentru versiunea 4.5.0 (care urma să fie lansată în aprilie).

Ar putea fi util să aruncați o privire asupra codului real (destul de scurt) folosit pentru funcția care a fost inclusă în nucleu, aici: https://developer.wordpress.org/reference/functions/unregister_post_type/. Face puțin mai mult decât această funcție, deși nu sunt sigur când au fost introduse funcțiile pe care se bazează aceste îmbunătățiri.

Acest lucru a funcționat pentru mine, așa cum a spus Rarst, folosind remove_action() dacă este posibil.
add_action( 'after_setup_theme','remove_foundation_options', 100 );
function remove_foundation_options() {
remove_action( 'init', 'Orbit');
}

După cum a menționat t31os, este ușor să elimini un tip de postare din variabila globală.
Dar dacă te referi la un tip de postare non-core, atunci ar fi mai bine să cauți codul care îl înregistrează și să îl dezactivezi folosind remove_action()
(dacă este un cod bine scris, ar trebui să fie înregistrat cu un hook și nu rulat direct).

register_post_type()
nu este o funcție care se pretează ușor la hook-uri. Modul normal de a înregistra un tip de postare este să rulezi funcția direct într-o funcție legată la init. Eliminarea acelei acțiuni poate avea efecte nedorite, deoarece adesea vor fi eliminate și alte funcționalități odată cu acea funcție.
