Dar de baja los tipos de publicaciones personalizadas

44

¿Alguien sabe de una forma de cancelar el registro de tipos de publicaciones personalizadas?

¿Hay un equivalente a register_post_type()?

anu
fuente
1
CUALQUIER OTRO BUSCANDO ESTO. Cuando registra una publicación personalizada, no se guarda nada en la base de datos. La tabla de publicaciones en wp db no está estructurada. Solo se registra con las partes internas del script wp que puede crear una entrada en la tabla de publicaciones con el tipo de lo que haya creado con las publicaciones de registro. Espero que ayude a alguien más.
MageProspero
2
A partir de WordPress 4.5 hay una función para hacer eso unregister_post_type. Ver Anular el registro de un tipo de publicación utilizando unregister_post_type
Dhinju Divakaran

Respuestas:

38

Actualmente no existe una función para cancelar el registro de un tipo de publicación, sin embargo, el proceso es bastante simple.

Andrew Nacin proporcionó un código en trac, que se encuentra aquí y se publica a continuación.

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;

Anular el registro de un tipo de publicación incorporado tendrá efectos desconocidos en WordPress, así que hágalo bajo su propio riesgo. Anular el registro de un tipo de publicación personalizado debería ser perfectamente seguro, pero naturalmente no haría limpieza en su instalación (es decir, anular el registro de un tipo de publicación no equivale a la eliminación de datos de la base de datos).

Puedo imaginar algunos escenarios en los que esto podría ser necesario, pero el enfoque más sensato (donde sea posible) sería simplemente no registrar el tipo de publicación en primer lugar si no se desea.

t31os
fuente
2
De nada ... :) Si está agregando sus propios tipos de publicación en forma de código, la solución más fácil sería simplemente eliminar la función / código que ejecuta que los agrega. También tenga en cuenta que eliminar los tipos de publicación no los elimina de su tabla de publicaciones, por lo que puede tener entradas redundantes en esa tabla.
t31os
2
@anu: lo único que permanece "permanente" si no ejecuta la register_post_type()carga de cada página ( init) es probablemente la estructura de enlace permanente (actualícela y desaparecerá) y las publicaciones en la base de datos, que puede eliminar al hacerlo DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry el
Curiosamente, eliminé el código register_post_type para ese custom_post_type, y no había agregado ninguna publicación a ese cpt, pero no eliminó la interfaz de usuario del administrador.
Anu
O, por supuesto, ahora que lo intento de nuevo, funciona como lo describieron, es decir, la interfaz de usuario de administración para el nuevo cpt ha desaparecido. Probablemente soy un muppet :) Información útil de todos modos, así que gracias.
Anu
3
Actualización en febrero de 2016: esta función se fusionó en el núcleo para WP 4.5.0 (que se lanzará en abril).
Ricardo BRGWeb
37

A partir de WordPress 4.5 hay una función para hacer eso unregister_post_type,. Ejemplo:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
Dhinju Divakaran
fuente
esto debe tener una prioridad más alta que la utilizada para registrar el tipo de publicación, de lo contrario no funcionará
Mark Kaplun
@Dhinju Divakaran no está eliminando el tipo de publicación anterior de db que no estoy usando ahora.
Faiyaz Alam
está funcionando, asegúrese de dar alta prioridad a esta acción en comparación con la acción utilizada para registrar el tipo de publicación.
Ajith R Nair
1
Vale la pena mencionar que unregister_post_type()no elimina nada de la base de datos. Solo evita que se registre el tipo de publicación.
Dave Romsey
Esto funcionó muy bien para mí, pero tenga en cuenta que deberá informar a WordPress del cambio volviendo a guardar su estructura de Enlace permanente en la página de configuración Configuración -> Enlaces permanentes. De lo contrario, las páginas con enlaces permanentes en conflicto no funcionan correctamente.
MarkPraschan
7

Esto funcionó para mí, como dijo Rarst usando remove_action () si es posible.

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

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

Como señaló t31os, es fácil eliminar el tipo de publicación de la variable global.

Pero si te refieres a un tipo de publicación no central, entonces sería mejor buscar código que lo registre y desenganchar remove_action()(si es un código decente, debe engancharse en lugar de ejecutarse directamente).

Rarst
fuente
2
register_post_type()no es una función que se presta muy bien al enganche. La forma normal de registrar un tipo de publicación es ejecutar la función directamente en una función enganchada en init. Eliminar esa acción puede tener efectos no deseados, ya que a menudo habrá otra funcionalidad eliminada con esa función.
John P Bloch
@John P Bloch sí, soy consciente de eso. A veces terminas reconstruyendo todo init para hacerlo bien, al final depende del código específico y su calidad / cordura
Rarst
1

En WordPress versión 4.5 y superior, proporcionan una función para eliminar el tipo de publicación (unregister_post_type). Ejemplo

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

Funcionará definitivamente.

Nipun Tyagi
fuente