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

TablaUso
wp_termsAlmacena nombres y slugs de categorías.
wp_term_taxonomyVincula cada término a su tipo (‘product_cat’).
wp_term_relationshipsAsocia productos con categorías.
wp_postsContiene 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étodoVentajasLimitaciones
SQLRápido, masivo, sin pluginsRequiere conocimientos y cuidado
Plugins (ej. Bulk Category Editor)Interfaz visualLento, 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.

Ir al contenido