Deregistrare i tipi di post personalizzati

9 nov 2010, 15:33:18
Visualizzazioni: 66.1K
Voti: 50

Qualcuno conosce un modo per deregistrare i tipi di post personalizzati?

Esiste un equivalente di register_post_type()?

2
Commenti

QUALCUN ALTRO STA CERCANDO QUESTO. Quando registri un custom post type, nulla viene salvato nel database. La tabella posts nel database wp non è strutturata. Registra solo internamente nello script wp che puoi creare un entry nella tabella posts con il tipo di quello che hai creato con register_post_type. Spero che questo aiuti qualcun altro.

James Andino James Andino
4 feb 2016 01:00:37

A partire da WordPress 4.5 c'è una funzione per farlo unregister_post_type. Vedi Deregistrare un post type usando unregister_post_type

Dhinju Divakaran Dhinju Divakaran
12 lug 2016 07:54:48
Tutte le risposte alla domanda 5
5
43

A partire da WordPress 4.5 esiste una funzione per farlo, unregister_post_type. Esempio:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
12 lug 2016 07:57:28
Commenti

questo deve avere una priorità più alta rispetto a quella usata per registrare il post type altrimenti non funzionerà

Mark Kaplun Mark Kaplun
12 lug 2016 08:46:05

@Dhinju Divakaran non sta eliminando il vecchio post type dal database che non sto più usando ora.

Faiyaz Alam Faiyaz Alam
3 feb 2017 07:48:13

funziona, assicurati di dare una priorità più alta a questa azione rispetto all'azione usata per registrare il post type.

Ajith R Nair Ajith R Nair
15 mag 2017 00:23:07

Vale la pena menzionare che unregister_post_type() non elimina nulla dal database. Previene solo la registrazione del tipo di contenuto.

Dave Romsey Dave Romsey
3 mar 2018 02:40:07

Questa soluzione ha funzionato perfettamente per me, ma tieni presente che dovrai informare WordPress del cambiamento ri-salvando la struttura dei Permalink nella pagina di amministrazione Impostazioni -> Permalink. Altrimenti, le pagine con permalink in conflitto non funzioneranno correttamente.

MarkPraschan MarkPraschan
1 feb 2019 19:23:30
7
39

Attualmente non esiste una funzione per deregistrare un tipo di post, ma il processo è piuttosto semplice.

Andrew Nacin ha fornito del codice su trac, disponibile qui e riportato 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;

Deregistrare un tipo di post integrato in WordPress potrebbe avere effetti imprevedibili, quindi procedete a vostro rischio. Deregistrare un tipo di post personalizzato dovrebbe essere perfettamente sicuro, ma naturalmente non effettua alcuna pulizia nell'installazione (ad esempio, deregistrare un tipo di post non equivale alla rimozione dei dati dal database).

Posso immaginare alcuni scenari in cui questo potrebbe essere necessario, ma l'approccio più sensato (quando possibile) sarebbe semplicemente evitare di registrare il tipo di post in primo luogo se non è desiderato.

9 nov 2010 15:51:12
Commenti

Prego.. :) Se stai aggiungendo i tuoi tipi di post tramite codice, la soluzione più semplice sarebbe semplicemente rimuovere la funzione/codice che li aggiunge. Inoltre, nota che rimuovere i tipi di post non li elimina dalla tabella dei post, quindi potresti avere voci ridondanti in quella tabella.

t31os t31os
9 nov 2010 16:16:52

@anu: L'unica cosa che rimane "permanente" se non esegui register_post_type() ad ogni caricamento di pagina (init) è probabilmente la struttura dei permalink (aggiornala e sparirà), e i post nel database, che puoi rimuovere eseguendo DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.

Jan Fabry Jan Fabry
9 nov 2010 16:35:03

Curiosamente, ho rimosso il codice register_post_type per quel custom_post_type, e non avevo aggiunto alcun post a quel cpt, ma non ha rimosso l'interfaccia di amministrazione.

anu anu
9 nov 2010 16:36:04

Ovviamente, ora che riprovo, funziona come avete descritto - cioè l'interfaccia di amministrazione per il nuovo CPT è sparita. Probabilmente sono stato un po' tonto :) Comunque informazioni utili, grazie.

anu anu
9 nov 2010 16:37:44

Aggiornamento a febbraio 2016 - questa funzione è stata incorporata nel core per WP 4.5.0 (che verrà rilasciato ad aprile).

Ricardo Gonçalves Ricardo Gonçalves
4 feb 2016 21:43:41

Potrebbe essere utile dare un'occhiata al codice effettivo (piuttosto breve) utilizzato per la funzione che è stata inclusa nel core, qui: https://developer.wordpress.org/reference/functions/unregister_post_type/. Fa un po' più di questa funzione, anche se non sono sicuro di quando siano state introdotte le funzioni aggiuntive su cui si basa.

User User
2 mar 2018 22:14:58

La funzione remove Project CPT pubblicata qui entra in conflitto con Divi 3.11.x. Dovresti essere consapevole del suo utilizzo.

Ciro Urdaneta Ciro Urdaneta
2 ago 2018 16:32:43
Mostra i restanti 2 commenti
0

Questo ha funzionato per me, come ha detto Rarst, usando il remove_action() quando possibile.

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

function remove_foundation_options() {   
    remove_action( 'init', 'Orbit');    
}
19 gen 2012 17:09:08
2

Come ha notato t31os, è facile rimuovere un tipo di post dalla variabile globale.

Ma se intendi un tipo di post non standard (non-core), sarebbe meglio cercare il codice che lo registra e rimuoverlo con remove_action() (se il codice è ben scritto dovrebbe essere agganciato tramite hook piuttosto che eseguito direttamente).

9 nov 2010 15:55:35
Commenti

register_post_type() non è una funzione che si presta facilmente all'aggancio. Il modo normale per registrare un post type è eseguire la funzione direttamente in una funzione agganciata a init. Rimuovere quell'azione potrebbe avere effetti indesiderati, poiché spesso verrà rimossa anche altra funzionalità insieme a quella funzione.

John P Bloch John P Bloch
9 nov 2010 15:59:01

@John P Bloch sì, ne sono consapevole. A volte si finisce per ricostruire tutto init per farlo funzionare correttamente, alla fine dipende dal codice specifico e dalla sua qualità/sanità

Rarst Rarst
9 nov 2010 16:21:16
0

Nelle versioni di WordPress 4.5 e successive è disponibile una funzione per rimuovere un tipo di post (unregister_post_type). Esempio

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

Funzionerà sicuramente.

18 lug 2017 07:41:54