Annulla la registrazione di tipi di post personalizzati


44

Qualcuno sa un modo per annullare la registrazione di tipi di post personalizzati?

C'è un equivalente a register_post_type()?


1
QUALUNQUE ALTRO CERCA QUESTO. Quando registri un tipo di post personalizzato, nulla viene salvato nel database. La tabella dei messaggi nel db wp non è strutturata. Si sta solo registrando con gli interni dello script wp che è possibile creare una voce nella tabella dei messaggi con il tipo di qualsiasi cosa tu abbia mai creato con i messaggi di registro. Spero che aiuti qualcun altro.
MageProspero

2
A partire da WordPress 4.5 esiste una funzione per farlo unregister_post_type. Vedi Annullare la registrazione di un tipo di post utilizzando unregister_post_type
Dhinju Divakaran,

Risposte:


38

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.


2
Prego .. :) Se aggiungi i tuoi tipi di post in forma di codice, la soluzione più semplice sarebbe quella di rimuovere semplicemente la funzione / codice che esegui che li aggiunge. Inoltre, la rimozione dei tipi di post non li elimina dalla tabella dei post, quindi potresti avere voci ridondanti in quella tabella.
t31os,

2
@anu: L'unica cosa che rimane "permanente" se non esegui il 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]'.
Jan Fabry,

È interessante notare che ho rimosso il codice register_post_type per quel custom_post_type e non avevo aggiunto alcun post a quel cpt, ma non ho rimosso l'interfaccia utente dell'amministratore.
anu

O ovviamente, ora che ci riprovo, funziona come avete descritto voi - cioè l'interfaccia utente dell'amministratore per il nuovo cpt è andata. Probabilmente sono un muppet :) Informazioni utili comunque, quindi grazie.
anu

3
Aggiornamento a febbraio 2016: questa funzione è stata unita al core per WP 4.5.0 (da lanciare ad aprile).
Ricardo BRGWeb,

37

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');

questo deve avere una priorità maggiore rispetto a quello utilizzato per registrare il tipo di post, altrimenti non funzionerà
Mark Kaplun,

@Dhinju Divakaran non sta cancellando il vecchio tipo di post da db che non sto usando ora.
Faiyaz Alam,

funziona, assicurati di dare priorità a questa azione rispetto all'azione utilizzata per registrare il tipo di post.
Ajith R Nair,

1
Vale la pena ricordare che unregister_post_type()non elimina nulla dal database. Impedisce solo la registrazione del tipo di post.
Dave Romsey,

Questo ha funzionato benissimo per me, ma tieni presente che dovrai informare WordPress della modifica salvando nuovamente la struttura del Permalink nella pagina di amministrazione Impostazioni -> Permalink. Altrimenti, le pagine con permalink in conflitto non funzionano correttamente.
MarkPraschan,

7

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');    
}

5

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).


2
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.
John P Bloch,

@John P Bloch sì, ne sono consapevole. A volte
finisci

1

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.