Cómo reasignar productos de una categoría a otra en WooCommerce con SQL: Guía completa para ecommerce y desarrolladores
¿Tienes una tienda online en WooCommerce y necesitas mover productos de una categoría a otra de forma masiva? ¿Te preocupa perder tiempo editando producto por producto? En esta guía aprenderás cómo reasignar cientos o miles de productos a nuevas categorías directamente desde la base de datos usando SQL, de forma segura y rápida.
Este artículo está pensado tanto para dueños de ecommerce que quieren entender el proceso, como para técnicos y agencias que gestionan tiendas WooCommerce. Te explicaré:
- Cómo está estructurada la base de datos de categorías y productos en WooCommerce.
- Consultas SQL reales y explicadas línea por línea.
- Cómo hacer backups antes de tocar la base de datos.
- Errores frecuentes y cómo evitarlos.
- Beneficios SEO de mantener categorías bien organizadas.
¡Vamos paso a paso!
Índice de contenidos
- ¿Por qué reasignar productos de categoría en WooCommerce?
- Estructura de la base de datos de categorías en WooCommerce
- Consultas SQL para reasignar productos
- Ejemplo práctico paso a paso
- Pros y contras de usar SQL vs backend
- Buenas prácticas y seguridad
- Beneficios SEO de mantener categorías ordenadas
- Conclusión
¿Por qué reasignar productos de categoría en WooCommerce?
En WooCommerce, la organización de categorías es clave tanto para la experiencia de usuario como para el SEO. A veces necesitas mover productos masivamente porque:
- Has cambiado la estructura de categorías de tu tienda.
- Quieres optimizar el SEO y agrupar productos de otra manera.
- Detectas categorías con muy pocos productos y quieres consolidar.
- Necesitas actualizar tu catálogo tras una importación masiva.
Si tu tienda tiene pocos productos, podrías hacerlo manualmente desde el panel de WooCommerce. Pero cuando tienes cientos o miles de productos, es mucho más rápido y seguro hacerlo vía SQL.
Estructura de la base de datos de categorías en WooCommerce
WooCommerce usa la base de datos de WordPress. Los datos de categorías de productos están en estas tablas principales:
Tabla | Descripción |
---|---|
wp_terms | Contiene el nombre y slug de las categorías. |
wp_term_taxonomy | Indica a qué taxonomía pertenece (en WooCommerce suele ser product_cat ). |
wp_term_relationships | Relaciona productos (post_id) con la taxonomía. |
wp_posts | Los productos son un tipo de post. |
Así funciona la relación:
- El producto está en
wp_posts
(post_type = product). - La categoría está en
wp_terms
ywp_term_taxonomy
. - La relación entre producto y categoría está en
wp_term_relationships
.
Consultas SQL para reasignar productos
Vamos a ver cómo reasignar productos de una categoría a otra.
Supongamos:
- La categoría vieja tiene ID = 20.
- La categoría nueva tiene ID = 35.
La tabla clave es wp_term_relationships
. Aquí se guardan las relaciones entre productos y categorías.
**Paso 1: Localizar productos en la categoría antigua.**
SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = 20;
Explicación:
object_id
→ es el ID del producto (post ID).term_taxonomy_id = 20
→ busca todos los productos en la categoría 20.
**Paso 2: Asignar esos productos a la nueva categoría.**
Insertamos nuevas relaciones en wp_term_relationships
:
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) SELECT object_id, 35 FROM wp_term_relationships WHERE term_taxonomy_id = 20;
Explicación línea a línea:
INSERT INTO wp_term_relationships
: creamos nuevas relaciones.object_id
: ID de producto.term_taxonomy_id = 35
: la nueva categoría.- Seleccionamos todos los
object_id
de la categoría antigua.
**Paso 3: Eliminar relaciones antiguas si queremos quitar la categoría vieja.**
DELETE FROM wp_term_relationships WHERE term_taxonomy_id = 20;
¡Ojo! Solo borra si estás seguro de no necesitar mantener la categoría anterior en paralelo.
Ejemplo práctico paso a paso
Imagina que necesitas mover todos los productos de la categoría “Verano” (ID 20) a la categoría “Rebajas” (ID 35).
**1. Haz backup de la base de datos:**
mysqldump -u user -p database_name > backup_woocommerce.sql
**2. Ejecuta esta query para asignar los productos a la nueva categoría:**
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) SELECT object_id, 35 FROM wp_term_relationships WHERE term_taxonomy_id = 20;
**3. (Opcional) Borra la relación antigua si ya no quieres la categoría “Verano”:**
DELETE FROM wp_term_relationships WHERE term_taxonomy_id = 20;
Con esto, todos los productos pasarán a estar asociados a la nueva categoría.
Pros y contras de usar SQL vs backend
Ventajas SQL | Desventajas SQL |
---|---|
Mucho más rápido para grandes catálogos. | Requiere conocimientos técnicos. |
Permite cambios masivos en pocos segundos. | Si cometes un error, puedes romper relaciones. |
Ideal para tiendas con miles de productos. | Obliga a hacer backups antes de tocar nada. |
Para cambios pequeños, mejor usar el backend. Para grandes volúmenes, SQL es imbatible.
Buenas prácticas y seguridad
- Siempre haz backup antes de ejecutar SQL.
- Prueba en un entorno staging antes que en producción.
- Verifica los IDs de las categorías antes de escribir queries.
- No borres datos si no estás seguro de sus relaciones.
- Consulta logs de errores tras los cambios.
¡Más vale invertir 10 minutos en una copia de seguridad que perder toda la tienda!
Beneficios SEO de mantener categorías ordenadas
Una estructura de categorías bien definida es clave para el SEO:
- Permite que Google entienda mejor tu catálogo.
- Evita canibalización de palabras clave.
- Facilita la navegación para los usuarios.
- Reduce URLs huérfanas y enlaces rotos.
Reasignar productos puede parecer solo “mover productos”, pero en realidad puede tener un impacto enorme en la visibilidad de tu tienda online.
Conclusión
Reasignar productos de una categoría a otra en WooCommerce con SQL es una técnica imprescindible para tiendas con catálogos grandes. Te ahorra horas de trabajo y mantiene tu ecommerce ordenado y optimizado para SEO.
¿Quieres que te ayudemos a reasignar categorías en tu WooCommerce sin riesgo y de forma segura? ¡Contáctanos!