Índice

RESUMEN

1. Introducción

2. Tablas implicadas en el proceso

3. Clonar una categoría

  • 3.1 Clonar ps_category
  • 3.2 Clonar ps_category_lang
  • 3.3 Clonar ps_category_shop

4. Clonar productos de la categoría

  • 4.1 Obtener productos asociados
  • 4.2 Clonar cada producto (básico)
  • 4.3 Clonar ps_product_lang
  • 4.4 Clonar ps_product_shop
  • 4.5 Clonar ps_stock_available
  • 4.6 Relacionar el producto clonado con la nueva categoría

5. Comparativa con otros métodos

6. Buenas prácticas

7. Conclusión

RESUMEN TÉCNICO (TL;DR)

CÓDIGO DESTACADO (APÉNDICE)

Resumen

Clonar una categoría completa junto a todos sus productos en PrestaShop puede ser una operación valiosa para tiendas que gestionan catálogos por temporada, idiomas o estrategias comerciales. Este artículo explica paso a paso cómo hacerlo mediante consultas SQL, cuidando la integridad relacional y ofreciendo alternativas comparativas con métodos tradicionales.

  1. Introducción

En tiendas PrestaShop con cientos de productos y categorías, replicar una categoría entera puede ahorrar tiempo en vez de hacerlo desde el back-office. Por ejemplo, si quieres crear una versión «verano 2025» de una categoría «verano 2024», lo puedes automatizar con SQL.

Clonaremos:

  • La categoría en sí (estructura, nombre, metadatos)
  • Todos los productos asociados a esa categoría
  1. Tablas implicadas en el proceso
TablaDescripción
ps_categoryDatos principales de la categoría
ps_category_langNombre y metadatos por idioma
ps_category_shopRelación con tiendas (multitienda)
ps_category_productRelación de productos con categorías
ps_productProducto principal
ps_product_langTexto, nombre, descripción por idioma
ps_product_shopDatos por tienda
ps_stock_availableStock del producto
  1. Clonar una categoría

3.1 Clonar ps_category

INSERT INTO ps_category (id_parent, level_depth, active, date_add, date_upd, position)
SELECT id_parent, level_depth, active, NOW(), NOW(), position
FROM ps_category
WHERE id_category = 12; -- ID de la categoría original

Obtener el nuevo id_category generado:

SELECT MAX(id_category) FROM ps_category;

Supongamos que el nuevo ID es 123.

3.2 Clonar ps_category_lang

INSERT INTO ps_category_lang (id_category, id_shop, id_lang, name, description, link_rewrite)
SELECT 123, id_shop, id_lang, CONCAT(name, ' (Clon)'), description, CONCAT(link_rewrite, '-clon')
FROM ps_category_lang
WHERE id_category = 12;

3.3 Clonar ps_category_shop

INSERT INTO ps_category_shop (id_category, id_shop, position)
SELECT 123, id_shop, position FROM ps_category_shop WHERE id_category = 12;
  1. Clonar productos de la categoría

4.1 Obtener productos asociados

SELECT id_product FROM ps_category_product WHERE id_category = 12;

Iteramos sobre esos IDs para duplicarlos.

4.2 Clonar cada producto (básico)

INSERT INTO ps_product (reference, price, active, id_category_default, date_add, date_upd)
SELECT CONCAT(reference, '-CLON'), price, active, 123, NOW(), NOW()
FROM ps_product WHERE id_product = 50; -- Ejemplo con ID 50
Obtener nuevo id_product:
SELECT MAX(id_product) FROM ps_product;

Supongamos que es 210.

4.3 Clonar ps_product_lang

INSERT INTO ps_product_lang (id_product, id_lang, id_shop, name, description, link_rewrite)
SELECT 210, id_lang, id_shop, CONCAT(name, ' (Clon)'), description, CONCAT(link_rewrite, '-clon')
FROM ps_product_lang WHERE id_product = 50;

4.4 Clonar ps_product_shop

INSERT INTO ps_product_shop (id_product, id_shop, price, active)
SELECT 210, id_shop, price, active FROM ps_product_shop WHERE id_product = 50;

4.5 Clonar ps_stock_available

INSERT INTO ps_stock_available (id_product, id_product_attribute, id_shop, quantity)
SELECT 210, 0, id_shop, quantity FROM ps_stock_available WHERE id_product = 50 AND id_product_attribute = 0;

4.6 Relacionar el producto clonado con la nueva categoría

INSERT INTO ps_category_product (id_category, id_product, position)
VALUES (123, 210, 1);

Repetir esto para cada producto. Puedes automatizarlo con un script PHP o un procedimiento almacenado.

  1. Comparativa con otros métodos
MétodoVentajasInconvenientes
SQL directoRápido, control totalRiesgo si no se manejan claves bien
Back-officeSeguro, con validaciónNo permite clonar productos masivos
Módulos externosInterfaz amigableCoste adicional, menor flexibilidad
  1. Buenas prácticas
  • Haz backup antes de comenzar
  • Usa transacciones para rollback en caso de error
  • Valida que los IDs generados coinciden correctamente
  • No olvides regenerar friendly URLs si usas SEO

Conclusión

Clonar categorías y sus productos en PrestaShop mediante SQL permite ahorrar tiempo y escalar operaciones, especialmente en tiendas con catálogos amplios o frecuentes cambios estacionales. Aunque requiere cuidado con los IDs y las dependencias, una buena estructura y un enfoque paso a paso lo convierten en un recurso muy poderoso para desarrolladores y técnicos. Automatizar este tipo de tareas puede ser clave en entornos de alto volumen o multitienda.

RESUMEN TÉCNICO (TL;DR):

  • Clonar categorías requiere copiar entradas en ps_category, ps_category_lang y ps_category_shop
  • Para copiar productos, se duplican registros de ps_product y sus relaciones
  • Es necesario reasignar el id_category_default y establecer nuevas relaciones con ps_category_product
  • Puede automatizarse con SQL puro o PHP

CÓDIGO DESTACADO (APÉNDICE):

  1. Obtener productos de una categoría:
SELECT id_product FROM ps_category_product WHERE id_category = 12;
  1. Clonar un producto:
INSERT INTO ps_product (reference, price, id_category_default, date_add, date_upd)
SELECT CONCAT(reference, '-CLON'), price, 123, NOW(), NOW()
FROM ps_product WHERE id_product = 50;
  1. Asignar producto clonado a nueva categoría:
INSERT INTO ps_category_product (id_category, id_product, position)
VALUES (123, 210, 1);
Ir al contenido