Import Product Categories and Taxonomies
WooCommerce products use WordPress taxonomies for product categories, product tags, shipping classes, and any custom product taxonomies. Import WP maps these in the Taxonomies section of the WooCommerce Products template.
Table of Contents
Add a taxonomy row
- Open the Taxonomies section.
- Click Add Row once per taxonomy (for example one row for categories, one for tags).
- Choose the taxonomy and map the terms field from your file.
Example CSV
| Name | SKU | Price | Tags | Categories |
|---|---|---|---|---|
| Simple Product 1 | simple-one | 10.99 | Simple | Products > Simple |
| Simple Product 2 | simple-two | 12.99 | Simple, Product 2 | Products > Simple |
| Simple Product 3 | simple-three | 14.99 | Simple, Product 3 | Clothing > T-Shirts > Graphic |
Field reference
| Field | Description |
|---|---|
| Taxonomy | e.g. product_cat, product_tag, product_shipping_class, or a custom taxonomy |
| Terms | Term values from your file. Multiple terms separated by a delimiter (default ,) |
| Delimiter | Character that separates multiple terms. Leave empty for , |
| Term Type | Whether values are Name, Slug, or ID (or custom field lookup) |
| Enable Hierarchy | Yes when terms include parent/child paths |
| Hierarchy Character | Default > — e.g. Parent > Child > Grandchild |
| Hierarchy Relationship | Connect the product to all terms in the path, or only the last (leaf) term |
| Append terms | Overwrite existing terms, or append new ones |
Category hierarchy
To create or assign nested categories:
- Format terms as
Parent > Child(or your hierarchy character). - Set Enable Hierarchy to Yes.
- Choose Hierarchy Relationship:
- All terms — product is assigned to Parent and Child
- Last term — product is assigned only to Child (parents still created as needed)
Example:
Clothing > T-Shirts > Graphic
With hierarchy enabled, Import WP creates missing parent/child terms and assigns the product according to your relationship setting.
Multiple categories per product
Separate category paths with commas (or your delimiter):
Products > Simple, Clearance > Summer
If a category name itself contains commas, change the taxonomy delimiter or use a different separator in the file and set Delimiter to match.
You can also change the default delimiter with a snippet — see How to Import WordPress Taxonomies onto a Post Type.
Append vs replace terms
| Append terms | Behaviour |
|---|---|
| No (default in many setups) | Product terms for that taxonomy are replaced by the imported list |
| Yes | New terms are added alongside existing ones |
Use Append = Yes when your update feed only sends additional categories and should not remove existing ones.
Shipping class
Shipping class is a taxonomy (product_shipping_class), not a field under Shipping dimensions.
Add a Taxonomies row:
- Taxonomy:
product_shipping_class - Terms: shipping class name or slug
Updating categories on existing products
- Map Product SKU (or GTIN) and set it as the unique identifier.
- On Permissions, enable Update.
- Ensure taxonomy fields are allowed on update (not excluded in field restrictions).
- Decide Append terms Yes/No based on whether the feed is a full category list or a partial one.
See Update Existing WooCommerce Products.
Default “Uncategorized” behaviour
When your import assigns real product_cat terms, Import WP’s WooCommerce integration removes WooCommerce’s default category from the product if it was only still attached alongside the imported categories. You usually do not need to clear “Uncategorized” manually.
Common problems
| Symptom | What to check |
|---|---|
| Flat categories instead of nested | Enable Hierarchy is No, or hierarchy character is wrong |
| Product in wrong child category | Hierarchy path spelling; Hierarchy Relationship setting |
| Only one of several categories imports | Delimiter issue; commas inside names |
| Categories missing on update | Update permissions; taxonomy field excluded; Append vs replace |
| “Invalid taxonomy” | Taxonomy slug typo; taxonomy not registered for product |
| Images & categories both missing | Often two separate mapping issues — verify each section |