PS PrestaShop Intermediate

WooCommerce to PrestaShop Migration — Complete Guide

Install, connect and run the complete WooCommerce → PrestaShop migration: the 7 steps, mapping, dry-run and troubleshooting.

Updated Module version 1.1.0

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.

Was this page helpful?

Still stuck? Contact support