Deregistrar tipos de posts personalizados

9 nov 2010, 15:33:18
Vistas: 66.1K
Votos: 50

¿Alguien sabe cómo deregistrar tipos de posts personalizados?

¿Existe un equivalente a register_post_type()?

2
Comentarios

¿ALGUIEN MÁS BUSCANDO ESTO? Cuando registras un tipo de publicación personalizada, nada se guarda en la base de datos. La tabla de posts en la base de datos de WordPress no está estructurada. Solo se registra internamente en el script de WP que puedes crear una entrada en la tabla de posts con el tipo de lo que sea que hayas creado con register_post_type. Espero que esto ayude a alguien más.

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

A partir de WordPress 4.5 existe una función para hacer eso: unregister_post_type. Ver Anular el registro de un tipo de publicación usando unregister_post_type

Dhinju Divakaran Dhinju Divakaran
12 jul 2016 07:54:48
Todas las respuestas a la pregunta 5
5
43

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');
12 jul 2016 07:57:28
Comentarios

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

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

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

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

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.

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

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.

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

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.

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

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.

9 nov 2010 15:51:12
Comentarios

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.

t31os t31os
9 nov 2010 16:16:52

@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]'.

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

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.

anu anu
9 nov 2010 16:36:04

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.

anu anu
9 nov 2010 16:37:44

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

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

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.

User User
2 mar 2018 22:14:58

La función remove Project CPT publicada aquí entra en conflicto con Divi 3.11.x. Debes tener cuidado al usarla.

Ciro Urdaneta Ciro Urdaneta
2 ago 2018 16:32:43
Mostrar los 2 comentarios restantes
0

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');    
}
19 ene 2012 17:09:08
2

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

9 nov 2010 15:55:35
Comentarios

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.

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

@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 Rarst
9 nov 2010 16:21:16
0

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

18 jul 2017 07:41:54