Une base VirtueMart et une base WooCommerce ne partagent aucune structure de données commune : ni les mêmes tables, ni la même logique de prix, ni la même hiérarchie de catégories. Ce constat, souvent redécouvert avec agacement au moment de reprendre une boutique Joomla vieillissante, conditionne toute la suite du chantier. La vraie contrainte n’est pourtant pas là : l’ancien système continue d’encaisser des commandes réelles jusqu’au dernier jour, et aucune interruption de service n’est acceptable pendant la reconstruction. Ce billet ne traite pas le choix du frontend de la future boutique — uniquement l’architecture de migration du catalogue et des données, sans rupture de vente.
Comprendre la structure de données VirtueMart
VirtueMart stocke ses produits dans des tables préfixées virtuemart_products, avec des tables séparées pour les traductions, les catégories, les prix et les images, reliées entre elles par des identifiants numériques sans grande cohérence avec le modèle de données WordPress. Aucun outil d’import automatique fiable n’existe pour ce couple précis : la migration passe nécessairement par un script d’export sur mesure, produit par produit, qui reconstruit chaque champ dans son équivalent WooCommerce.
-- Extraction typique côté VirtueMart (MySQL)
SELECT p.virtuemart_product_id, pd.product_name, pd.product_s_desc,
pp.product_price, p.product_sku
FROM virtuemart_products p
JOIN virtuemart_products_prices pp ON p.virtuemart_product_id = pp.virtuemart_product_id
JOIN virtuemart_products_fr_fr pd ON p.virtuemart_product_id = pd.virtuemart_product_id
WHERE p.published = 1;
Architecture de migration en parallèle

Plutôt qu’une bascule brutale, la méthode la plus sûre consiste à construire la nouvelle boutique WooCommerce sur un environnement distinct, alimentée par des exports réguliers de VirtueMart, pendant que l’ancienne boutique continue de fonctionner normalement pour les clients. L’arborescence de synchronisation ressemble à ceci :
joomla-virtuemart (production, en vente)
└── export quotidien vers CSV structuré
└── script de transformation (SKU, prix, catégories, images)
└── import WooCommerce (environnement de préproduction)
└── vérification manuelle du catalogue
└── bascule finale + gel des commandes VirtueMart
Cette synchronisation quotidienne permet de valider progressivement la qualité de la conversion — catégories bien reconstituées, prix TTC cohérents, images correctement rattachées — sans jamais toucher à la boutique en production tant que la validation n’est pas terminée.
Gérer les commandes au moment de la bascule
Le jour de la bascule reste le point le plus délicat : les commandes passées dans les dernières heures sur VirtueMart doivent être identifiées et traitées manuellement, car elles n’existent pas encore dans l’export qui a servi à construire le catalogue WooCommerce. La méthode la plus fiable consiste à figer les ventes sur VirtueMart quelques heures avant la bascule DNS, en affichant un message de maintenance temporaire, puis à effectuer un dernier export incrémental juste avant de couper définitivement l’ancien système.
- Geler les nouvelles commandes VirtueMart au moins deux heures avant la bascule.
- Effectuer un dernier export incrémental des produits modifiés dans cette fenêtre.
- Vérifier manuellement les commandes en cours de traitement, qu’il faudra honorer via l’ancien système même après la bascule du catalogue public.
Reconstituer le référencement existant
Les URL VirtueMart suivent une structure très différente de celle de WooCommerce, souvent avec un identifiant numérique visible dans le lien. Un tableau de correspondance ancienne URL vers nouvelle URL, associé à des redirections 301 posées au niveau du serveur, préserve l’essentiel du référencement acquis. Les identifiants SKU, quand ils existent côté VirtueMart, sont la clé la plus fiable pour établir cette correspondance automatiquement lors du script de transformation.
Points de vigilance techniques
Les prix VirtueMart sont parfois stockés hors taxe avec un taux appliqué séparément selon la catégorie fiscale du produit, une logique qu’il faut reproduire fidèlement dans la configuration de taxes WooCommerce pour éviter tout écart de TTC lors de la bascule. Les images, souvent stockées dans une arborescence de dossiers propre à Joomla, doivent être réimportées dans la médiathèque WordPress avec les bons attributs alt, faute de quoi le catalogue perd toute cohérence visuelle au moment de l’ouverture.
Gardez l’ancienne base VirtueMart accessible en lecture seule plusieurs mois après la bascule : elle reste la seule source fiable en cas de litige sur une commande passée juste avant le changement de système.
En résumé
Migrer un catalogue Joomla VirtueMart vers WooCommerce sans rupture de vente demande une architecture en parallèle plutôt qu’une bascule brutale : export régulier, transformation contrôlée, validation progressive en préproduction, puis gel temporaire des commandes le jour de la bascule finale. Cette méthode, plus longue qu’un import automatique, reste la seule qui garantisse une continuité commerciale réelle.