Multistore Duplication of a Full Category — PrestaShop 8 & 9
Install and use the multistore duplication wizard: source, target-shop mapping, copy options and batch execution.
This module adds a back-office wizard that duplicates a whole category — with all its products, combinations, images, attributes, specific prices and stock — from one shop to one or several other shops within the same multistore PrestaShop. This documentation covers installation, how it works internally, and step-by-step use of the wizard.
Requirements
- PrestaShop 8.0 to 9.x.
- Multistore mode must be enabled (Advanced Parameters then Multistore), with at least two shops.
- An employee profile with write access to the catalog.
If multistore is disabled or a single shop exists, the wizard shows a message and does not allow duplication: there would be no target shop.
Installation
- In the back office, open Modules then Module Manager.
- Click “Upload a module” and drop the ZIP file.
- Once installed, a tab appears under Catalog, named “DF Shop Duplicator”.
How it works
Unlike a plain product duplicator, the module does not create new product entities. It builds on PrestaShop’s native multistore association mechanism: a product stays a shared entity, and only shop-specific data is copied to the target shop.
Concretely, for each duplicated product the module copies the per-shop rows: product_shop, product_lang, image_shop, product_attribute_shop, stock_available, specific_price (shop-scoped, cart excluded), plus carrier associations and the required lookup tables (attributes, attribute groups, features, manufacturer, supplier, tax rule group).
Direct consequence: no duplicated product reference, no image re-copied on disk, and a product’s future global changes keep propagating to every shop that shares it.
Categories, on the other hand, are handled differently. Because a category’s parent id (id_parent) is global, you cannot simply “associate” a tree under another parent. The module therefore creates new categories under the target parent you designated — or reuses those that already exist, depending on the chosen option.
Using the 3-step wizard
Step 1 — Source shop and category
Select the starting shop, then the category to duplicate in the tree. Tick “include sub-categories” if you want to process the whole branch and not just the selected category. The number of affected products is shown to help you.
Step 2 — Target shops and mapping
Tick one or several destination shops. For each ticked shop, a category tree appears: designate the destination category under which the products (and optionally the tree) will be placed. By default, the target shop’s root is preselected.
Step 3 — Options and execution
Set the copy options (see the next section), review the summary, then start the duplication. A progress bar and a live log show progress product by product, along with any warnings.
Options in detail
- Copy the tree: re-creates sub-categories under the target category, keeping the hierarchy. Unticked, all products are placed directly under the target category (“flatten” mode).
- Reuse existing categories: instead of re-creating categories, the module finds those already present under the target parent by matching their URL rewrite. This is what makes duplication idempotent.
- Copy quantities: duplicates stock to the target shop (see stock handling below).
- Specific prices: copies shop-scoped specific prices.
- Pack products (recursive): also associates the child products of packs included in the selection.
- Search re-indexing: re-indexes each copied product for front-office search. Useful but slower on large volumes.
- Batch size: number of products processed per AJAX pass (20 by default, up to 200). Lower it on constrained hosting, raise it to go faster.
Re-creating and reusing categories
When “Reuse existing categories” is enabled, the module looks under the target parent for a category whose URL rewrite matches the source. If it finds one, it uses it; otherwise it creates a new one. You can therefore re-run the duplication as many times as needed without piling up duplicate categories — for example after adding new products to the source.
For a first “flat” sync where all products should land under a single target category, untick “Copy the tree” and leave “Reuse existing categories” ticked.
Stock handling and sharing across shops
Stock copying respects the shop group’s stock sharing setting. If the source and target shops already share the same stock pool, the copy is skipped: duplicating quantities would create inconsistencies. Otherwise, quantities are copied to the target shop. These decisions are traced in the execution log.
Pack products
If the selection contains packs and the matching option is enabled, the module recursively associates each pack’s child products to the target shop, so the pack stays sellable. A guard prevents loops with nested packs.
Large catalogs and resume
Execution runs as successive AJAX batches: the browser chains the calls until completion, which avoids any PHP timeout even on several thousand products and combinations. The job is persisted in the database (dedicated table), with a position pointer: if processing is interrupted (tab closed, network drop), it can resume where it stopped instead of restarting from scratch.
Troubleshooting
The wizard says multistore is unavailable
Check that multistore mode is enabled and that at least two shops exist. The wizard needs a source shop and at least one distinct target shop.
Some products seem “missing” in the target shop
Make sure the destination category is correctly mapped in step 2 and that products are active. In “flatten” mode, products are placed under the single target category, not under a re-created tree.
Stock was not copied
This is the expected behavior if both shops share the same stock pool. The execution log flags it with a warning.
After a second run, I see duplicate categories
Enable “Reuse existing categories”. Without this option, every run re-creates new categories under the target parent.