Cuando el cliente me dijo que necesitaba mover su tienda de WooCommerce a PrestaShop con 10.000 SKUs activos y sin bajar la tienda más de 2 horas, supe que iba a ser un proyecto interesante. Este es el resumen de lo que aprendí.

Fase 1: Auditoría antes de tocar nada

Lo primero no es exportar datos, es entender qué tienes. En este caso la tienda tenía:

  • Productos con variantes de hasta 4 atributos combinados
  • Clientes con historial de compras de 5 años
  • Reviews integradas con un plugin de terceros (no nativo de WooCommerce)
  • Metadatos personalizados en pedidos que usaba el ERP para facturación

Esos metadatos personalizados fueron la parte más complicada. WooCommerce los guarda en wp_postmeta con claves arbitrarias; PrestaShop no tiene ese concepto por defecto.

Fase 2: Script de exportación a CSV intermediario

En lugar de usar herramientas automáticas de migración (que prometen mucho y fallan en los bordes), escribí scripts PHP que exportaban cada entidad a CSVs normalizados con exactamente los campos que PrestaShop espera en su importador.

// Exportar productos WooCommerce a CSV de PrestaShop
$args = ['post_type' => 'product', 'posts_per_page' => -1];
$products = get_posts($args);

foreach ($products as $p) {
  $wc_product = wc_get_product($p->ID);
  $row = [
    'id'          => $p->ID,
    'name'        => $p->post_title,
    'price'       => $wc_product->get_price(),
    'description' => $p->post_content,
    'ean13'       => get_post_meta($p->ID, '_sku', true),
  ];
  // escribir $row al CSV...
}

Lo que nadie te dice

Las herramientas automáticas de migración no manejan bien los casos extremos: productos fuera de stock con precio 0, pedidos en estados personalizados, imágenes con nombres de archivo que tienen caracteres especiales. Cada uno de esos fue un bug que tuve que corregir manualmente en el CSV antes de importar.

El 80% del tiempo de una migración real se gasta en el 20% de los datos que no encajan en ningún template estándar.

Resultado final

La tienda bajó exactamente 1 hora 47 minutos. Los 10.000 productos, 8.200 clientes y 15.000 pedidos históricos llegaron intactos. Las reviews se perdieron — esa era la condición negociada desde el inicio porque migrarlas hubiera requerido un módulo personalizado que no estaba en el presupuesto.