Introducción
Reasignar productos entre categorías en WooCommerce puede ser una tarea lenta si se hace manualmente desde el panel de WordPress. Sin embargo, con un enfoque técnico utilizando SQL puedes mover decenas o cientos de productos en segundos.
Este artículo te explica cómo hacerlo paso a paso, qué tablas están involucradas, y cómo validar el cambio para que no afecte negativamente al funcionamiento de tu tienda.
Índice
- 1. Cuándo es útil esta técnica
- 2. Tablas clave de WooCommerce
- 3. Consultas SQL explicadas paso a paso
- 4. Añadir una nueva categoría sin quitar la actual
- 5. Eliminar la categoría anterior (opcional)
- 6. Buenas prácticas y validaciones
- 7. Comparativa entre SQL y plugins
- 8. Conclusión
1. ¿Cuándo aplicar esta técnica?
Estos son algunos escenarios en los que mover productos con SQL tiene mucho sentido:
- Cuando has importado un CSV con categorías erróneas.
- Estás reestructurando el catálogo (ej. agrupar por marca o temporada).
- Quieres eliminar categorías antiguas sin perder productos.
2. Tablas implicadas
Tabla | Uso |
---|---|
wp_terms | Almacena nombres y slugs de categorías. |
wp_term_taxonomy | Vincula cada término a su tipo (‘product_cat’). |
wp_term_relationships | Asocia productos con categorías. |
wp_posts | Contiene los productos (post_type = ‘product’). |
3. Consultas SQL paso a paso
🔍 Paso 1: Ver qué productos hay en una categoría
Esto te ayuda a comprobar cuántos productos estás a punto de mover:
SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 123;
🧹 Paso 2: Quitar productos de la categoría actual
Elimina la asociación con la categoría «origen». Solo afecta la relación, no borra productos:
DELETE FROM wp_term_relationships WHERE term_taxonomy_id = 123 AND object_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'product' );
➕ Paso 3: Asignar los productos a la nueva categoría
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) SELECT ID, 456 FROM wp_posts WHERE post_type = 'product' AND ID IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 123 );
🔎 Revisa que el ID 456 corresponde a la nueva categoría destino en `wp_term_taxonomy`.
4. Añadir una categoría sin eliminar la anterior
Si quieres que los productos estén en dos categorías al mismo tiempo:
INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id) SELECT ID, 456 FROM wp_posts WHERE post_type = 'product' AND ID IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 123 );
La cláusula INSERT IGNORE
evita que se dupliquen relaciones si ya existen.
5. Eliminar la categoría antigua (opcional)
Solo haz esto si ya no quieres usar la categoría anterior. Asegúrate de que no queden productos huérfanos.
DELETE FROM wp_term_taxonomy WHERE term_taxonomy_id = 123; DELETE FROM wp_terms WHERE term_id = 123;
6. Buenas prácticas
- Haz un backup antes de ejecutar cambios.
- Prueba las consultas en una copia local o staging.
- Revisa que los productos siguen visibles tras la reasignación.
- Vacía cachés si usas plugins como WP Rocket o LiteSpeed.
7. SQL vs Plugin: ¿qué conviene más?
Método | Ventajas | Limitaciones |
---|---|---|
SQL | Rápido, masivo, sin plugins | Requiere conocimientos y cuidado |
Plugins (ej. Bulk Category Editor) | Interfaz visual | Lento, limitado, puede requerir versión Pro |
8. Conclusión
Reasignar productos entre categorías con SQL es una solución eficaz para tiendas grandes o para tareas de mantenimiento masivo.
¿Quieres ayuda para implementarlo de forma segura y sin errores? 📩 Escríbenos y lo automatizamos por ti.