Importing products into WooCommerce is usually a smooth process, but certain technical details can unexpectedly interrupt it. One of the most common reasons imports fail or behave unpredictably is a problem with product IDs.
Because WooCommerce relies on WordPress’s internal ID system, product imports often interact with existing site data in ways that aren’t immediately obvious. On stores with existing products, pages, orders, or media, or during migrations from another site, these interactions can quickly lead to conflicts that stop an import mid-way or produce incomplete results.
When these issues aren’t addressed, you may see products skipped, imports fail entirely, or existing data updated incorrectly. This not only wastes time but can also create inconsistencies in your store. The good news is that once you understand how WooCommerce handles IDs during imports, resolving these problems becomes straightforward.
In the article, we’ll walk through why these conflicts occur and how you can resolve them to ensure a smooth, error-free product import process.
Key Takeaways:
- Product ID issues are a common cause of WooCommerce import failures. Because WordPress uses a shared ID system, imports can conflict with existing content.
- If not handled properly, ID conflicts can cause import failures, missing products, or incorrect updates.
- Understanding how WooCommerce handles IDs makes resolving conflicts easy. With the right settings and best practices, you can prevent issues and ensure smooth, reliable product imports.
In WooCommerce, every product is stored as a WordPress post. This means each product is assigned a unique post ID in the WordPress database, specifically in the wp_posts table. This post ID is what WordPress uses internally to identify and manage content.
What often causes confusion is that post IDs are shared across all content types in WordPress. Products don’t have their own separate ID system. Instead, the same pool of IDs is used for:
- WooCommerce products and product variations
- Orders
- Pages and blog posts
- Media files such as images and attachments
- Custom post types created by plugins or themes
Because of this shared system, an ID that appears “unused” for products may already be assigned to a page, an order, or even an image.
An ID conflict occurs during import when your CSV file includes an ID value that already exists in the WordPress database. When WooCommerce (or an import plugin) tries to create a product using that ID, WordPress blocks the action to prevent duplicate post IDs. As a result, the import may fail, skip the product, or display errors such as “Post ID already exists” or “Importing post ID conflicts with an existing post”.
This is especially common when importing products from another store, re-importing old CSV files, or migrating data between sites. Understanding how WordPress handles post IDs is the first step toward fixing and preventing these import issues.
When an ID conflict occurs during a WooCommerce product import, it usually shows up as an error message in the import results screen or in the import log. While the wording may vary slightly depending on the import tool you’re using, the underlying cause is often the same.
“Importing post ID conflicts with an existing ID”
This is the most direct and common error related to ID conflicts. It appears when the import file contains a post ID that already exists in your WordPress database. Since WordPress does not allow two posts of any type to share the same ID, the importer stops the process for that product.
This error typically occurs when:
- You’re importing a CSV exported from another WooCommerce or WordPress site
- The CSV includes hard-coded IDs from the source site
- The destination site already has content using those same IDs
In most cases, WooCommerce will skip the affected product and continue importing the rest, leaving you with an incomplete catalog.
“Post is not a Product”
This error can be confusing at first, but it’s often tied to the same ID conflict issue. It happens when the importer finds an existing post with the same ID but a different post type, such as a page, order, image, or blog post.
From WordPress’s perspective, the ID already belongs to something else, so it cannot be reused or converted into a product. As a result, the importer throws the “Post is not a Product” error and skips that row.
This error is especially common on sites that:
- Already have pages, orders, or media uploaded
- Use multiple plugins that create custom post types
- Are importing products into a non-empty store
How These Errors Relate to ID Conflicts
Both of these error messages point to the same underlying issue: the import process is trying to use a post ID that WordPress has already assigned. Whether the ID belongs to another product or a completely different post type, WordPress treats it as unavailable.
Reviewing the import log or error report can help you identify which rows in your CSV caused the issue. Many import tools will list the conflicting ID or the affected product row, making it easier to correct the problem before running the import again.
Solutions to Resolve ID Conflicts During Product Import
If your WooCommerce product import is failing due to an ID conflict, don’t worry, it’s a common issue and can usually be fixed quickly.
With the WebToffee WooCommerce Product Import Export plugin, you can handle ID conflicts in different ways depending on whether you’re importing new products, updating existing ones, or migrating from another store.
Below are the most effective solutions you can try.
1. Remove or Unmap the ID Column
The simplest and safest solution is to remove the ID column from your CSV file before starting the import.
When no ID is provided, WordPress automatically assigns a new, unique post ID to each imported product. This completely eliminates the possibility of ID conflicts and is considered a best practice when importing products that don’t need to match existing records.
This approach works best when:
- You’re importing new products
- You don’t need to preserve original post IDs
- The destination store already contains content
2. Map Products by SKU Instead of ID
If your products have unique SKUs, mapping by SKU is a far more reliable approach than mapping by ID.
Instead of trying to match products using post IDs (which differ between sites), the importer uses the SKU to identify whether a product already exists. This allows the import to update existing products without triggering ID conflicts.
Mapping by SKU is especially useful when:
- Migrating products from another WooCommerce store
- Updating prices, stock, or descriptions in bulk
- Running repeat imports on the same catalog
Pro Tip: Always ensure SKUs are unique and consistent before importing.
3. Use Plugin Import Options (Import as New Item)
Many advanced import tools, including WebToffee’s Product Import Export plugin, provide a built-in option to handle ID conflicts automatically.
When an ID conflict is detected, you can choose options such as:
- Import as a new item
- Skip import of new products

With this setting enabled, the plugin ignores the conflicting ID and automatically assigns the next available post ID, allowing the import to continue without errors.
This option is useful when:
- Your CSV contains IDs, but you don’t want to edit the file
- You want a quick, tool-based solution
- You’re handling large imports where manual cleanup isn’t practical
4. Change the Conflicting ID in Your CSV
In some advanced cases, you may want to manually change the ID value in your CSV file to an unused number.
This approach is generally used when:
- You need to preserve a specific ID structure
- You understand how post IDs are used across your site
- You’ve confirmed the new ID does not already exist
Note: Use this method with caution. Manually assigning IDs can lead to further conflicts if not done carefully, especially on active sites with ongoing content creation.
Updating Existing Products Without Conflicts
When your goal is to update existing products rather than create new ones, using the right import settings is key to avoiding ID conflicts.
The WooCommerce Product Import Export plugin provides an option like “Update existing products” in the import’s advanced settings. When this option is enabled, the importer looks for an existing product and updates it rather than creating a new one with a specific post ID. This prevents WordPress from attempting to reuse an ID that’s already taken, which is one of the main causes of import failures.

However, how the importer identifies an “existing product” matters a lot.
Why SKUs Work Better Than IDs
Matching products by SKU is far more reliable than matching by post ID, especially when importing from another site.
Post IDs are site-specific. An ID that belongs to a product on one WooCommerce store may belong to a page, order, or image on another. This makes IDs unpredictable and risky to use for cross-site imports.
SKUs, on the other hand:
- Are designed to be unique identifiers for products
- Remain consistent across different stores
- Don’t depend on WordPress’s internal ID system
When you enable “Update existing products” and match products by SKU, the importer can safely locate the correct product and apply updates such as price changes, stock levels, descriptions, or images, without triggering ID conflicts.
No. WordPress does not allow duplicate post IDs under any circumstances. Since all content types, products, pages, orders, images, and more share the same ID pool, forcing an import with an already-used ID is not possible.
To resolve this, you must either:
– Remove the ID column from your import file
– Map products using another identifier, such as SKU
– Allow the import tool to assign a new ID automatically
Trying to override this limitation will always result in import errors or skipped products.
No, as long as you use SKUs correctly. When IDs are removed, WordPress simply assigns new ones during import. Product URLs, images, variations, and relationships will still work as expected, as long as your import relies on SKUs or proper field mapping.
For repeat imports or updates, using SKUs ensures that the importer can still identify and update the correct products without depending on post IDs.
In most cases, no. It’s usually better to let WooCommerce assign new IDs during order import. Order IDs are internal database identifiers and don’t need to match the original store. If maintaining visible order numbers is important, you can:
– Use a custom order number plugin
– Store the original order ID in order meta for reference
This approach avoids ID conflicts while preserving historical data.
Yes. Product variations are stored as separate posts in WordPress and have their own post IDs. This is another reason why ID conflicts can happen even when importing “only products.” Using parent SKU + variation attributes is the safest way to handle variations during import.
Deleting products does not guarantee that the same IDs will be reused. WordPress continues incrementing IDs even after deletion, so this approach rarely solves the problem and can cause data loss.
Wrapping Up
ID conflicts during WooCommerce product imports can be frustrating, but they’re also highly preventable once you understand how WordPress handles post IDs. In most cases, these conflicts don’t happen because something is “wrong” with your data; they happen because IDs from one site simply don’t translate cleanly to another.
WebToffee’s Product Import/Export tools take the guesswork out of product imports and protect your store from incomplete data, skipped products, and failed imports with built-in safeguards. With the right preparation and settings, you can import products confidently, without worrying about ID conflicts disrupting your workflow.
By following these best practices, you’ll save time, reduce errors, and keep your WooCommerce store data clean and consistent, no matter how often you import or migrate products.