Guardar los campos personalizados en tablas reales y tipadas en lugar de en wp_postmeta te da ordenación, índices y tipos correctos, como se explica en otros artículos de este blog. También introduce una categoría de riesgo que wp_postmeta nunca tuvo: los cambios de esquema. Renombrar una columna o cambiar su tipo es una operación normal de base de datos, pero no es automáticamente segura, y un plugin que gestiona tablas en tu nombre tiene que tomárselo en serio.
Este artículo explica qué ocurre realmente, a nivel mecánico, cuando renombras un campo, cambias su tipo o lo eliminas en Mass Custom Fields, y qué hace Table health cuando las definiciones de tus grupos de campos y tus tablas reales dejan de coincidir.
Las reglas detrás de cada guardado
Cada campo es una columna, así que editar un grupo de campos guardado modifica una tabla real. En cada guardado se aplican cuatro reglas:
- Primero la tabla, después la definición. Primero se modifica la tabla. Solo si eso funcionó se guarda la definición del grupo de campos, de modo que un guardado fallido no puede dejar ambas desincronizadas.
- Todo o nada. Si un paso falla, por ejemplo porque un nuevo índice único encuentra valores duplicados, los pasos ya realizados se deshacen y el mensaje termina con «Nothing was changed.»
- Eliminar nunca borra datos. La columna de un campo eliminado permanece en la tabla.
- Las conversiones arriesgadas conservan una copia de seguridad. Antes de una conversión que podría perder datos, los valores antiguos se copian a una columna de copia de seguridad.
Renombrar un campo no pierde datos
Cuando cambias la clave de un campo, la operación subyacente es un renombrado de columna, no un borrado y una recreación. Los datos que ya hay en esa columna se quedan exactamente donde están; solo cambia el nombre de la columna, y los índices del campo se renombran con ella. El editor te avisa antes de guardar de que el renombrado ejecutará RENAME COLUMN. La forma ingenua de renombrar una columna (añadir una nueva, copiar los valores y borrar la antigua) es más lenta en tablas grandes y tiene más formas de salir mal.
ALTER TABLE wp_wpmcf_fg_product
RENAME COLUMN release_date TO launch_date;Tras un renombrado, actualiza las plantillas, los shortcodes y el código que todavía usen la clave antigua.
Cambiar el tipo de un campo conserva el valor antiguo
Cambiar el tipo de un campo es más arriesgado que renombrarlo, porque no todos los valores del tipo antiguo se convierten limpiamente al nuevo. Truncar una columna TEXT a un VARCHAR más corto puede cortar datos reales; convertir texto libre en un número transforma los valores no numéricos en NULL o 0.
Ante un cambio arriesgado, el editor muestra el cuadro de diálogo «This type change can lose data» con tres opciones:
- Cancel, y no cambia nada.
- Convert with a backup. Primero los valores antiguos pasan a una columna llamada
{key}__bak. Comprueba los valores convertidos tras guardar y elimina la copia de seguridad en Table health cuando estés conforme. - Create a new field instead. Se añade un segundo campo con el nuevo tipo y la columna antigua se deja intacta, lo que encaja cuando quieres migrar los valores con tus propias reglas.
Un cambio compatible, como de Text a Text area, simplemente modifica la columna y conserva los valores.
Eliminar un campo no borra tus datos
Al eliminar un campo en el editor se elimina la definición del campo (lo que lo hace editable y visible), pero la columna y sus valores permanecen en la tabla como columna sobrante. Borrar datos es una acción distinta y explícita. Desactivar el plugin tampoco borra nada, y desinstalarlo solo elimina datos si activas la opción de eliminación en Settings.
Si añades un campo nuevo con el mismo nombre que una columna sobrante, el editor pregunta si el nuevo campo debe usar los valores guardados o empezar vacío, y en el segundo caso mueve los valores antiguos a una columna de copia de seguridad.
Qué es la deriva y por qué ocurre
La deriva (drift) es cualquier diferencia entre cómo debería ser la tabla según la definición de un grupo de campos y cómo es realmente. Puede ocurrir por motivos corrientes: un desarrollador ejecutó SQL, una herramienta de migración eliminó una columna o se restauró una copia de seguridad de forma parcial.
Table health existe para sacar esto a la luz en lugar de dejar que se descubra más tarde como un error confuso. Para cada grupo guardado muestra una insignia de estado y estadísticas de tamaño, además de un panel Table differences con hasta tres listas:
Lista | Significado | Acciones |
|---|---|---|
Missing columns | Definidas en el grupo de campos pero ausentes de la tabla | Add to DB |
Leftover columns | Están en la tabla pero no en la definición, incluidas las columnas de copia de seguridad | Import as fields, Remove from DB |
Changed outside the plugin | El tipo SQL de la base de datos difiere de la definición | Sync to DB |
Las tablas que no tienen ningún grupo de campos aparecen como tablas sin registrar al principio de la lista Field Groups. Puedes registrarlas como grupo o eliminarlas.
Para más detalles sobre cada panel, consulta Table health.
Las tablas grandes cambian en segundo plano
Algunas operaciones de esquema, como añadir un índice a una tabla con un gran número de filas, no son instantáneas. Cuando una tabla tiene unas 100 000 filas o más, el cambio se pone en cola y se ejecuta en segundo plano mediante Action Scheduler, el mismo gestor de tareas que usa WooCommerce. El editor muestra una insignia Updating, el sitio sigue usando la definición anterior hasta que el cambio termina, y los valores guardados mientras tanto se conservan. Un cambio en cola se puede cancelar; uno que ya se está ejecutando, no.
Conclusión
Un plugin que gestiona tablas reales en tu nombre tiene que tratar los cambios de esquema con el mismo cuidado que aplicaría a mano un ingeniero meticuloso: renombrados que no mueven datos, cambios de tipo que dejan una vía de vuelta, eliminaciones que no tocan la columna hasta que tú lo indicas, y un panel que te avisa cuando la realidad y la definición no coinciden. Las reglas completas se describen en cambiar un grupo de campos de forma segura.



