A WPML matrix your import can actually read
Build one CSV or Google Sheet with every language in columns. Shirely reads that matrix, creates the WooCommerce products or categories, and connects the translations in WPML during the import.
One row is not enough
A multilingual WooCommerce product is not just a translated name. Prices, SKUs, attributes, categories and translation relationships all need to stay aligned.
Separate files drift
When every language has its own CSV, a small change becomes a comparison task. One missing row can break the relationship between a product and its translation.
WPML needs relationships
WPML stores language and translation links separately from WooCommerce product data. A useful import format has to carry enough information to build those links.
Use language columns, not language files
In Matrix Mode, each translated field uses the same base column name plus a language code. Shirely imports the default-language product first, then creates the translated products and connects them in WPML.
The important part is consistency: the same SKU or Matrix ID identifies the product across every language in the row.
Map Product Matrix
Language columns are recognised from the file header and mapped before the import starts.
Matrix Mode: EN, DE, FR| Source column | Mapped field | Sample | |
|---|---|---|---|
| sku | → | SKU | DRILL-18 |
| name|en | → | Product name [EN] | Cordless drill |
| name|de | → | Product name [DE] | Akku-Bohrmaschine |
| name|fr | → | Product name [FR] | Perceuse sans fil |
| regular_price | → | Regular price | 129.00 |
What the matrix needs to contain
| Part of the file | Why it matters |
|---|---|
| Stable product identifier | Use SKU for products, or a Matrix ID when SKU is not the right business key. |
| Translated columns | Use field names with language suffixes, such as name|en, name|de and description|fr. |
| Shared product fields | Keep prices, stock status and other non-translated values in regular columns. |
| Global attributes | Use shared pa_* columns by default. Language-suffixed attribute columns require the explicit WCML Matrix opt-in and a taxonomy already configured as translatable. |
| Category source IDs | Use stable category IDs instead of relying on translated names as the relationship key. |
| Parent source IDs | For category trees, each child points to the same parent source ID in every language. |
The matrix is not a magic spreadsheet. It is a disciplined format: one business object, all its languages, and the IDs needed to connect them.
Map Category Matrix
Stable source IDs preserve the category tree while language columns create the WPML translations.
Matrix Mode: EN, DE, FR| Source column | Mapped field | Sample | |
|---|---|---|---|
| source_id | → | Source ID | drills |
| parent_source_id | → | Parent source ID | tools |
| name|en | → | Name [EN] | Drills |
| name|de | → | Name [DE] | Bohrmaschinen |
| name|fr | → | Name [FR] | Perceuses |
Category trees need their own matrix
Product categories are where many WPML imports fail. Names can change between languages, but the tree still needs the same parent-child structure.
Shirely uses source_id and parent_source_id to create the category hierarchy and connect translated terms in WPML.
CSV, Sheets or a saved slot
Use the same Matrix structure in CSV or Google Sheets. A public Sheet can be imported without credentials; private Sheets and every export require a Service Account. A proven workflow can be saved as a 1.3.0 Automation slot.
Products are processed every run
Matrix imports are not skipped by Smart Sync. Use SKU or another stable identifier so Shirely can match rows to existing products when you re-import.
WPML is optional
Shirely can import regular WooCommerce catalogs without WPML. Matrix Mode is for stores that do need multilingual product and category relationships.
Schedule writers sequentially
Start with Run now and check Run History. WP-Cron is traffic-dependent; use system cron with WP-CLI when timing matters, and do not overlap imports that may change the same WPML/WCML objects.
Measured import context
| Catalog | About 8,500 WooCommerce products and 1,040 categories |
| Languages | 4 WPML languages |
| Workflow | Product Matrix and Category Matrix import |
| Observed result | About 3 hours, compared with 12+ hours in a previous importer workflow |
| Server context | SEOHOST SH3 shared hosting, 3 vCPU, 6 GB RAM; external image downloads were the main bottleneck. |
WPML matrix questions
Can I download a template?
Use the examples on this page as the structure. A real template should match your fields, languages, identifiers and taxonomy setup, so Shirely focuses on mapping the columns you actually use.
Can global attributes be translated?
Yes, through the explicit 1.3.0 WCML Matrix opt-in, but only when the global attribute taxonomy is already configured as translatable. Otherwise use the shared attribute path.
Does this edit WPML database tables directly?
No. Shirely imports through WordPress and WooCommerce workflows and creates the WPML relationships needed for the imported products or categories.