Deregistrar tipos de posts personalizados
¿Alguien sabe cómo deregistrar tipos de posts personalizados?
¿Existe un equivalente a register_post_type()
?

A partir de WordPress 4.5 existe una función para hacer eso, unregister_post_type
. Ejemplo:-
function delete_post_type(){
unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');

esto necesita tener una prioridad más alta que la utilizada para registrar el tipo de publicación, de lo contrario no funcionará

@Dhinju Divakaran no está eliminando el antiguo tipo de publicación de la base de datos que ya no estoy usando.

está funcionando, asegúrate de darle una prioridad más alta a esta acción en comparación con la acción utilizada para registrar el tipo de publicación.

Vale la pena mencionar que unregister_post_type()
no elimina nada de la base de datos. Solo evita que el tipo de contenido se registre.

Esto funcionó muy bien para mí, pero ten en cuenta que deberás informar a WordPress del cambio volviendo a guardar la estructura de Permalinks en la página de Configuración -> Enlaces permanentes. De lo contrario, las páginas con enlaces permanentes conflictivos no funcionarán correctamente.

Actualmente no existe una función para desregistrar un tipo de publicación (post type), sin embargo el proceso es bastante simple.
Andrew Nacin proporcionó algo de código en trac, disponible aquí y publicado 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;
Desregistrar un tipo de publicación integrado puede tener efectos desconocidos en WordPress, así que hazlo bajo tu propio riesgo. Desregistrar un tipo de publicación personalizado debería ser completamente seguro, pero naturalmente no realizará ninguna limpieza en tu instalación (es decir, desregistrar un tipo de publicación no equivale a eliminar datos de la base de datos).
Puedo imaginar algunos escenarios donde esto podría ser necesario, pero el enfoque más sensato (cuando sea posible) sería simplemente no registrar el tipo de publicación en primer lugar si no se desea.

De nada.. :) Si estás agregando tus propios tipos de contenido en forma de código, la solución más fácil sería simplemente eliminar la función/código que ejecutas para agregarlos. También ten en cuenta que eliminar tipos de contenido no los elimina de tu tabla de posts, por lo que podrías tener entradas redundantes en esa tabla.

@anu: Lo único que permanece "permanente" si no ejecutas el register_post_type()
en cada carga de página (init
) es probablemente la estructura de permalinks (actualízala y desaparecerá), y los posts en la base de datos, que puedes eliminar ejecutando DELETE FROM wp_posts WHERE post_type = '[tu tipo de post personalizado]'
.

Curiosamente, eliminé el código register_post_type para ese custom_post_type, y no había agregado ningún post a ese CPT, pero no eliminó la interfaz de administración.

Por supuesto, ahora que lo intento de nuevo, funciona como ustedes describieron - es decir, la interfaz de administración para el nuevo CPT ha desaparecido. Probablemente fui yo siendo un tonto :) De todos modos, información útil, así que gracias.

Actualización en febrero de 2016 - esta función fue incorporada al núcleo para WP 4.5.0 (a lanzarse en abril).

Podría ser útil revisar el código real (bastante corto) utilizado para la función que llegó al núcleo, aquí: https://developer.wordpress.org/reference/functions/unregister_post_type/. Hace un poco más que esta función, aunque no estoy seguro de cuándo se introdujeron las funciones en las que se basan esas mejoras.

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

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 personalizado (no del núcleo), sería mejor buscar el código que lo registra y desengancharlo con remove_action()
(si es un código bien estructurado, debería estar enganchado en lugar de ejecutarse directamente).

register_post_type()
no es una función que se preste fácilmente para enganchar. La forma normal de registrar un tipo de post es ejecutar la función directamente en una función enganchada a init. Eliminar esa acción puede tener efectos no deseados, ya que a menudo se eliminará otra funcionalidad junto con esa función.

En WordPress versión 4.5 y superior, proporcionan una función para eliminar tipos de publicación (unregister_post_type). Ejemplo
function eliminar_tipo_publicacion(){
unregister_post_type( 'jobs' ); // Elimina el tipo de publicación 'jobs'
}
add_action('init','eliminar_tipo_publicacion'); // Ejecuta la función durante la inicialización
Definitivamente funcionará.
