Cancelar o registro de tipos de postagem personalizados

44

Alguém conhece uma maneira de cancelar o registro de tipos de postagem personalizados?

Existe um equivalente a register_post_type()?

anu
fonte
1
QUALQUER OUTRO PROCURANDO ISSO. Quando você registra um tipo de postagem personalizado, nada está sendo salvo no banco de dados. A tabela de postagens no wp db não é estruturada. É apenas o registro com as partes internas do script wp que você pode criar uma entrada na tabela de postagens com o tipo de que você criou com as postagens de registro. Espero que ajude mais alguém.
MageProspero
2
A partir do WordPress 4.5, existe uma função para fazer isso unregister_post_type. Veja Unregister um tipo de pós usando unregister_post_type
Dhinju Divakaran

Respostas:

38

Atualmente, não há uma função para cancelar o registro de um tipo de postagem, mas o processo é bastante simples.

Andrew Nacin forneceu algum código sobre o trac, encontrado aqui e postado abaixo.

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;

O cancelamento do registro de um tipo de postagem interno terá efeitos desconhecidos no WordPress, portanto, faça-o por sua conta e risco. O cancelamento do registro de um tipo de postagem personalizado deve ser perfeitamente seguro, mas naturalmente não limparia sua instalação (por exemplo, cancelar o registro de um tipo de postagem não equivale à remoção de dados do banco de dados).

Posso imaginar alguns cenários em que isso poderia ser necessário, mas a abordagem mais sensata (sempre que possível) seria simplesmente não registrar o tipo de postagem em primeiro lugar, se não for desejado.

t31os
fonte
2
De nada .. :) Se você estiver adicionando seus próprios tipos de postagem no formato de código, a solução mais fácil seria simplesmente remover a função / código executado que os adiciona. Observe também que a remoção dos tipos de postagem não os expulsa da tabela de mensagens, portanto, você pode ter entradas redundantes nessa tabela.
T31os
2
@anu: A única coisa que permanece "permanente" se você não executar o register_post_type()carregamento de cada página ( init) provavelmente é a estrutura do permalink (atualize-a e ela desaparecerá) e as postagens no banco de dados, que você poderá remover fazendo DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry
Curiosamente, removi o código register_post_type para esse custom_post_type e não adicionei postagens a esse cpt, mas ele não removeu a interface do usuário do administrador.
anu
Ou, é claro, agora que eu tento novamente, funciona como vocês descreveram - ou seja, a interface do administrador para o novo cpt se foi. Provavelmente eu sendo um muppet :) Informações úteis de qualquer maneira, então obrigado.
anu
3
Atualização em fevereiro de 2016 - essa função foi mesclada no núcleo do WP 4.5.0 (a ser lançado em abril).
precisa saber é o seguinte
37

A partir do WordPress 4.5, existe uma função para fazer isso unregister_post_type,. Exemplo:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
Dhinju Divakaran
fonte
essa necessidade de estar no maior prioridade, em seguida, o utilizado para registrar o tipo de pós de outra forma não vai funcionar
Mark Kaplun
@ Dhinju Divakaran, não está excluindo o tipo de post antigo do db que não estou usando agora.
Faiyaz Alam 3/02
estiver funcionando, certifique-se de dar alta prioridade a esta ação, comparada à ação usada para registrar o tipo de postagem.
amigos estão dizendo sobre ajith r
1
Vale ressaltar que unregister_post_type()não exclui nada do banco de dados. Apenas impede que o tipo de postagem seja registrado.
18760 Dave Grosey: #
Isso funcionou muito bem para mim, mas lembre-se de que você precisará informar o WordPress sobre a alteração salvando novamente sua estrutura Permalink na página de administração Configurações -> Permalinks. Caso contrário, as páginas com links permanentes conflitantes não funcionarão corretamente.
MarkPraschan
7

Isso funcionou para mim, como Rarst disse usando o remove_action (), se possível.

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

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

Como o t31os observou, é fácil remover o tipo de postagem da variável global.

Mas se você quer dizer um tipo de postagem não essencial, seria melhor procurar o código que o registra e desconectar remove_action()(se for um código decente, ele deve ser conectado ao invés de ser executado diretamente).

Rarst
fonte
2
register_post_type()não é uma função que se presta muito bem a enganchar. A maneira normal de registrar um tipo de postagem é executar a função diretamente em uma função ligada ao init. A remoção dessa ação pode ter efeitos indesejados, pois muitas vezes haverá outras funcionalidades removidas com essa função.
John P Bloch
@ John P Bloch sim, estou ciente disso. Às vezes você acaba reconstruir todas init para obtê-lo direito, no final, depende de código específico e sua qualidade / sanidade
Rarst
1

No WordPress versão 4.5 e superior, eles fornecem uma função para remover o tipo de postagem (unregister_post_type). Exemplo

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

Funcionará definitivamente.

Nipun Tyagi
fonte