# WooCommerce to PrestaShop Migration — Complete Guide

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

- Page: <https://www.datafirefly.com/en/documentation/dfmigratewoocommerce/>
- Language: en
- Last updated: 2026-07-01
- Other languages: [fr](https://www.datafirefly.com/documentation/dfmigratewoocommerce/index.md), [es](https://www.datafirefly.com/es/documentation/dfmigratewoocommerce/index.md), [de](https://www.datafirefly.com/de/documentation/dfmigratewoocommerce/index.md), [it](https://www.datafirefly.com/it/documentation/dfmigratewoocommerce/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfmigratewoocommerce/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfmigratewoocommerce/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfmigratewoocommerce/index.md)
- Index: <https://www.datafirefly.com/en/documentation/llms.txt>

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

1. In the PrestaShop back office, open **Modules > Module Manager > Upload a module** and select the `dfmigratewoocommerce.zip` file.
2. The module creates three technical tables: `df_woomig_mapping` (Woo ↔ PS matches), `df_woomig_log` (log) and `df_woomig_progress` (step progress).
3. 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_` — check `wp-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) or `local` (the site URL is treated as a filesystem path containing `wp-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:

1. **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.
2. **Categories** — the full tree is rebuilt; missing parents are resolved recursively, orphans attached to the root with a warning.
3. **Tags** — deduplicated by name.
4. **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.
5. **Images** — catch-up step: iterates already-migrated products and imports missing images (main image + gallery), regenerating all thumbnails.
6. **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.
7. **Orders** — automatic HPOS detection (WooCommerce 8+, `wc_orders` tables) 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.
