WooCommerce to PrestaShop Migration — Complete Guide
Install, connect and run the complete WooCommerce → PrestaShop migration: the 7 steps, mapping, dry-run and troubleshooting.
Overview
WooCommerce Migration (dfmigratewoocommerce) migrates a complete WooCommerce store to PrestaShop 8 or 9: categories, tags, global attributes, simple and variable products (variations converted to combinations), images, custom metadata, customers with addresses and orders. The module connects directly to the WordPress MySQL database, works in AJAX batches with no timeout and keeps a Woo ↔ PS mapping in the database that makes every step rerunnable without duplicates.
The source WooCommerce database is only read, never modified. All writes happen on the PrestaShop side.
Installation
- In the PrestaShop back office, open Modules > Module Manager > Upload a module and select the
dfmigratewoocommerce.zipfile. - The module creates three technical tables:
df_woomig_mapping(Woo ↔ PS matches),df_woomig_log(log) anddf_woomig_progress(step progress). - Click Configure to open the migration interface.
Connecting to WooCommerce
In the Connection tab, fill in:
- Host / Port: MySQL server of the WordPress database (port 3306 by default);
- Database, User, Password: WordPress database credentials;
- Table prefix: usually
wp_— checkwp-config.php($table_prefix); - Site URL: the public address of the WooCommerce store, used to download images (HTTP mode), or a filesystem path in local mode.
Click Test connection: the module shows the number of products, categories, tags, global attributes, customers and orders detected in the source.
If your host blocks remote MySQL connections, import a dump of the WordPress database into a dedicated schema on the PrestaShop server (e.g. wp_source) and connect the module to it via localhost. An SSH tunnel works too.
Settings
- Default language: PrestaShop language into which the (monolingual) Woo content is written;
- Default tax rules group: applied to all migrated products — Woo prices are copied as-is into PrestaShop’s tax-excluded price;
- Attributes as features: enables the dual mapping (each global attribute also becomes a feature, visible on simple products) and the import of custom postmeta as
meta:*features; - Batch size: number of entities processed per AJAX request (25 by default; lower it on slow shared hosting);
- Image mode:
http(download from the site URL) orlocal(the site URL is treated as a filesystem path containingwp-content/uploads); - Dry-run: simulation mode — everything is logged, nothing is written;
- Default carrier: assigned to migrated orders.
Running the migration
In the Migration tab, run the steps in order — each one relies on the mapping created by the previous ones:
- Attributes — each Woo global attribute (
pa_*) becomes a PS attribute group (color groups are detected) and, if the option is enabled, a feature. All values are created on both sides. - Categories — the full tree is rebuilt; missing parents are resolved recursively, orphans attached to the root with a warning.
- Tags — deduplicated by name.
- Products — simple and variable products: prices, sale prices (SpecificPrice), SKU, weight, dimensions, stock, status, virtual products, category/tag links, features, custom metadata. Variations become combinations with their own price impact, stock and reference. Product images are migrated on the fly.
- Images — catch-up step: iterates already-migrated products and imports missing images (main image + gallery), regenerating all thumbnails.
- Customers — accounts with billing and shipping addresses. Passwords regenerated in bcrypt: customers use “forgot password” at first login. Existing PS emails are reused, never duplicated.
- Orders — automatic HPOS detection (WooCommerce 8+,
wc_orderstables) or legacy (wp_posts). Line items, totals, currency and statuses mapped to PrestaShop order states. No email is sent.
Each step shows a live progress bar and can be interrupted then relaunched: it resumes exactly where it stopped.
First do a full pass in dry-run to validate the scope in the log, then disable dry-run and rerun.
Mapping and reruns
The Mapping tab shows the number of matches per entity type. Any entity present in the mapping is skipped on reruns: you can rerun a complete step without creating duplicates. The reset button clears the mapping for one type (or all) — entities already created on the PrestaShop side stay in place.
Log
The Log tab lists events by step and level (info, success, warning, error): products created, variations skipped for lack of a global attribute, missing images, orders without customers… One-click purge.
After the migration
- Run a search reindex: Shop Parameters > Search > Index all products;
- Check a price sample if your Woo store saved tax-included prices (PrestaShop expects tax-excluded);
- Review the tax rules group, carriers and payment methods;
- Delete the connection settings (or uninstall the module): the MySQL credentials are stored in the PrestaShop configuration.
Known limitations
- Local attributes (defined on a single product, not
pa_*) used in variations cannot become combinations — PrestaShop requires global attributes. These variations are skipped and flagged in the log. Convert them to global attributes on the Woo side before migrating if needed. - Orders are migrated as history: taxes are not recomputed, Woo totals are copied as-is.
- Coupons, product reviews and subscriptions are not migrated in this version.
Troubleshooting
“Connection failed” on the test
Check that the MySQL user is allowed to connect from the PrestaShop server’s IP (GRANT ... ON db.* TO 'user'@'ip') and that port 3306 is open. Otherwise, use a local dump or an SSH tunnel.
Missing images in HTTP mode
The WooCommerce site must be reachable over HTTP/HTTPS from the PrestaShop server. If the source site is offline, use local mode by copying wp-content/uploads to the PrestaShop server and setting its path as the site URL.
Missing variations on a product
Check the log: if the variations used local (non-global) attributes, they are skipped by design. The parent product is migrated with its base data.