custom post types

Cómo cambiar el tipo de Custom Post Type en WordPress

En WordPress podemos crear diferentes tipos de contenido, los Custom Post Type.

A la hora de registrarlos utilizamos la función register_post_type( $post_type, $args ); El primero de los dos parámetros que recibe es el nombre o identificador que recibirá nuestro custom post type. Acepta un máximo de 20 caracteres, y no puede contener ni mayúsculas ni espacios.

Una vez definido, nos aparecerá en el menú de nuestro dashboard y podremos empezar a generar contenido.

En alguna ocasión podemos querer cambiar el nombre de este post type ya registrado, bien porque se nos ha ocurrido otro que encaja mejor, porque te lo ha pedido el cliente, o que quieres fusionar dos CPTs en uno sólo.

Si simplemente modificamos el nombre en el archivo PHP donde tenemos registrado el CPT en la función register_post_type(), y tenemos ya contenido creado, lo perderemos. O mejor dicho, lo perderemos de vista, ya que seguirá en base de datos en la tabla posts, pero registrado con el nombre anterior.

Actualizando el dato post_type en base de datos manualmente

Vamos a actualizar en base de datos el nombre del post_type que queremos cambiar. Podemos hacerlo mediante phpMyAdmin o ejecutando una consulta a base de datos directamente desde WP-CLI.

Imagina que tienes un custom post type llamado «trabajos», y lo quieres cambiar por «portfolio». Además de cambiar ese nombre en la función que registra el CPT, la consulta que debes ejecutar para no perder la información ya creada es la siguiente:

UPDATE wp_posts SET post_type='portfolio' WHERE post_type='trabajos';

También podemos ejecutar esta consulta con WP-CLI:

wp db query 'UPDATE wp_posts SET post_type="portfolio" WHERE post_type="trabajos"'

Saber cómo modificar el tipo de contenido puede ser muy útil si queremos fusionar dos CPTs en uno sólo, o por ejemplo si queremos convertir nuestras entradas en páginas:

UPDATE wp_posts SET post_type='page' WHERE post_type='post'

NOTA

Es importante que antes de realizar cualquier modificación que implique consultas y modificaciones directas en base de datos, realices una copia de seguridad.Además, recomiendo encarecidamente leer el comentario de Pablo Poveda donde analiza muchas más casuísticas a tener en cuenta, y que pueden afectar si cambias el nombre de un CPT.

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

6 comentarios en Cómo cambiar el tipo de Custom Post Type en WordPress

  1. Algunos puntos a considerar antes de realizar un cambio de nombre de un Custom Post Type

    – No estaría demás repasar que WordPress mantuviera correctamente las redirecciones, en cuyo caso negativo, habría que registrar las reglas precisas en el fichero .htaccess (o a través de otro procedimiento)

    – Ya que esto es un proceso manual, actualizar el sitemap.xml si lo hubiera también sería otro punto a tener en cuenta.

    – En el caso de tener reglas en los permalinks que afecten directamente al Custom Post Type que estás cambiando, también deberán modificarse.

    – Si has usado constantes (que sería lo correcto) para controlar las condicionales que comprueban si debes ejecutar alguna acción en función del CPT, el típico if($post->post_type == ‘nombre_del_cpt’), también se debería cambiar. Si has usado constantes para esto, sólo deberías modificar el valor de esta constantes.

    – Si el tema dispone de plantillas para un Custom Post Type específico deberemos renombrar esas plantillas. Check: https://developer.wordpress.org/themes/template-files-section/custom-post-type-template-files/

    – Si hay CSS (capa de presentación) ligada a la clase de un body para un específico nombre de Custom Post Type, también se deberá cambiar (buscar/reemplazar) en la hoja CSS las clases o identificadores afectados por este campo de nombre. (lo mismo para un JS si hubiera algún comportamiento específico para ese CPT)

    **En resumen:**
    Al realizar el cambio de nombre de un CPT, no sólo habrá que modificar la base de datos si no toda la lógica, programación y reglas de negocio que estén directamente relacionado con el Custom Post Type en cuestión.

    **Consejo:**
    Antes de realizar un cambio de nombre de un Custom Post Type revisa todos los puntos anteriores, o create una checklist de todo lo que deberías revisar antes de ejecutar el cambio.

      1. si si, son cojonudas las recomendaciones. De exo es precisamente uno de los temas que debatiamos es el tema de tener una buena y consistente nomenclatura de las clases y funciones, para o bien como comentas cambiar el nombre del CPT o incluso, al menos yo trato de hacerlo así, tratar siempre de implementar las cosas de forma atómica para poder modificar o eliminar sin que afecte al conjunto entero, tratando de independizarlo todo. Muy buen artículo y genial aporte de @disqus_c98wT1Frci:disqus 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *