Qualcuno sa un modo per annullare la registrazione di tipi di post personalizzati?
C'è un equivalente a register_post_type()
?
unregister_post_type
. Vedi Annullare la registrazione di un tipo di post utilizzando unregister_post_type
Qualcuno sa un modo per annullare la registrazione di tipi di post personalizzati?
C'è un equivalente a register_post_type()
?
unregister_post_type
. Vedi Annullare la registrazione di un tipo di post utilizzando unregister_post_type
Risposte:
Attualmente non esiste una funzione per annullare la registrazione di un tipo di post, tuttavia il processo è abbastanza semplice.
Andrew Nacin ha fornito del codice su trac, trovato qui e pubblicato di seguito.
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;
L'annullamento della registrazione di un tipo di post incorporato avrà effetti sconosciuti su WordPress, quindi si prega di farlo a proprio rischio. L'annullamento della registrazione di un tipo di post personalizzato dovrebbe essere perfettamente sicuro, ma naturalmente non eseguirà la pulizia della propria installazione (ad esempio, l'annullamento della registrazione di un tipo di post non equivale alla rimozione dei dati dal database).
Posso immaginare alcuni scenari in cui questo potrebbe essere richiesto, ma l'approccio più ragionevole (ove possibile), sarebbe semplicemente non registrare il tipo di post in primo luogo se non lo si desidera.
register_post_type()
caricamento su ogni pagina ( init
) è probabilmente la struttura del permalink (aggiornalo e sparirà), e i post nel database, che puoi rimuovere facendo DELETE FROM wp_posts WHERE post_type = '[your custom post type]'
.
Come di WordPress 4.5 v'è la funzione di farlo, unregister_post_type
. Esempio:-
function delete_post_type(){
unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
unregister_post_type()
non elimina nulla dal database. Impedisce solo la registrazione del tipo di post.
Questo ha funzionato per me, come ha detto Rarst usando il remove_action () se possibile.
add_action( 'after_setup_theme','remove_foundation_options', 100 );
function remove_foundation_options() {
remove_action( 'init', 'Orbit');
}
Come notato da t31os, è facile rimuovere il tipo di post dalla variabile globale.
Ma se intendi un tipo di post non core, sarebbe meglio cercare il codice che lo registra e sganciarlo remove_action()
(se è un codice decente, dovrebbe essere agganciato piuttosto che eseguito direttamente).
register_post_type()
non è una funzione che si presta bene all'aggancio. Il modo normale per registrare un tipo di post è quello di eseguire la funzione direttamente in una funzione agganciata a init. La rimozione di tale azione potrebbe avere effetti indesiderati, poiché spesso ci saranno altre funzionalità rimosse con quella funzione.
In WordPress versione 4.5 e successive forniscono una funzione per rimuovere il tipo di post (unregister_post_type). Esempio
function delete_post_type(){
unregister_post_type( 'jobs' );
}
add_action('init','delete_post_type');
Funzionerà sicuramente.