Skill level: Beginner
Time to complete: 10–20 minutes
Plugin location: Tools → CPT CSV Importer
What You’ll Learn
- How to prepare a CSV file for import
- How to create a brand-new Custom Post Type from your CSV structure
- How to import CSV data into an existing Custom Post Type
- What the plugin creates and where it stores things
Before You Begin
Prepare Your CSV
CSV Importer requires a header row — the first row of your file must contain column names. These names become your field labels and meta key names, so make them descriptive.
Good CSV structure:
Product Name, Category, Brand, SKU, Price, Description
Widget Pro, Tools, Acme, WP-001, 29.99, A professional-grade widget
Widget Lite, Tools, Acme, WL-001, 9.99, An entry-level widget
Gadget X, Electronics, Globex, GX-100, 149.99, A next-gen gadget
Tips for best results:
- Use simple, descriptive header names (avoid special characters other than spaces and underscores)
- Columns where many rows share values (like Category or Brand) work well as taxonomies
- Columns with unique values per row (like SKU or Description) work well as meta fields
- To store multiple taxonomy terms in one cell, separate them with a consistent character like a pipe
|or semicolon;
Multi-value example:
Product Name, Tags
Widget Pro, tools | hardware | professional
Gadget X, electronics | wireless | portable
Supported File Formats
- Extension:
.csv - Encoding: UTF-8 recommended (with or without BOM)
- Delimiters: Comma (default), Tab, Semicolon, Pipe
- Max size: Governed by your PHP
upload_max_filesizeandmax_execution_timelimits
Option A: Create a New CPT from Your CSV
Use this when you want to turn your spreadsheet structure into a fully working custom post type — with no coding required.
Step 1 — Go to the Importer
Navigate to Tools → CPT CSV Importer in the WordPress admin.
Step 2 — Choose “Create New CPT from CSV”
In the Mode section at the top of the page, select Create new CPT from CSV. This unlocks the full creation wizard.

Step 3 — Upload Your CSV
- Click Choose File and select your CSV
- Select the CSV Delimiter that matches your file (usually Comma)
- Select the Multi-value Delimiter — choose Auto-detect if you’re unsure, or manually pick the character you used to separate multiple taxonomy terms per cell
- Set Duplicate Handling — for a fresh import, “Always create new” is fine; if you’ll re-import later, “Skip existing” or “Update existing” prevent duplicates
Click Upload & Analyse.
Step 4 — Review Column Types

The plugin scans your data and suggests a type for each column:
| Type | What it means |
|---|---|
| Title | This column becomes the post title (one only) |
| Taxonomy | Creates a taxonomy; values become filterable terms |
| Text (Meta) | Stored as post meta; used for unique per-record values |
| Skip | Column is ignored during import |
The plugin makes these suggestions based on your data’s cardinality (how many unique values the column has). Low-cardinality columns (many repeating values) are flagged as taxonomies. High-cardinality columns are flagged as meta.
To change a suggestion: Click the radio button for the type you want. Changes are reflected immediately with row border colours:
- Green = Title
- Blue = Taxonomy
- Grey = Meta
- Red = Skip

Important: You must have exactly one Title column selected. JavaScript enforces this.
For taxonomy columns, check Multi-value if a single cell can contain multiple terms (e.g., tools | hardware).
You’ll also see a CPT Name field at the top. Enter a plural name for your post type (e.g., “Products”, “Business Listings”, “Events”). A slug preview updates live — this is the post type key used internally (e.g., business_listings).
Choose your Duplicate Handling preference and click Create Post Type & Continue.
Step 5 — Import
The plugin registers the CPT and taxonomies, then runs the import. A results summary shows:
- Created: New posts added
- Updated: Existing posts updated (if using Update mode)
- Skipped: Rows skipped due to existing title match
- Errors: Any rows that failed
All imported posts are created with status Publish.
What Was Created
After the wizard completes, you have:
- A new post type visible under its own menu item in the admin sidebar
- All taxonomy columns registered as filterable taxonomies
- All meta columns registered as admin list table columns
- All CSV data imported as published posts
- The CPT definition stored in WordPress options (persists across updates)
Option B: Import into an Existing CPT
Use this if your CPT already exists (registered by another plugin, a theme, or your own code) and you just want to populate it with CSV data.
Step 1 — Choose “Import into Existing CPT”
On the main importer page, ensure the mode is set to Import into existing CPT (this is the default).
Step 2 — Select Your Post Type
Choose the target post type from the dropdown. All registered public post types are listed, including WordPress built-ins (post, page) and any CPTs from other plugins.
Step 3 — Upload Your CSV
Same as Option A — upload your file, select delimiter options, and choose duplicate handling.
Step 4 — Map Columns
The mapping screen shows each column header and a dropdown to assign it:
| Mapping option | Result |
|---|---|
| Post Title | Sets the post_title field |
| Skip | Column ignored |
| [Taxonomy name] | Values assigned as terms to that taxonomy |
| Custom Meta Field | Stored as post meta — you specify the key name |
For taxonomy columns, the multi-value delimiter you selected in Step 3 is used to split cell values.

Tip: Use the dry run checkbox to preview results before committing. The import runs but no posts are created — you see what would happen.
Click Run Import (or Dry Run).

Step 5 — Review Results
Same results summary as Option A. Repeated imports with “Skip existing” are safe — already-imported rows are left untouched.
Viewing Your Imported Data
Once import is complete:
- In the admin sidebar, find your post type (e.g., “Products”)
- Click it to open the list table
- You’ll see custom columns for each taxonomy and meta field
- Use the filter dropdowns above the table to filter by taxonomy terms
For CPTs created by this plugin, the columns appear in the order you defined in Manage Fields.
Re-Importing / Updating Data
You can run the importer again at any time against the same CPT:
- Skip existing: Safe to re-run; already-imported rows are untouched; only new rows are added
- Update existing: Matches by post title and overwrites meta/taxonomy values
- Always create new: Creates duplicates — only use this if you intentionally want all rows added regardless
Deleting a CPT Created by This Plugin
Go to Tools → CPT CSV Importer → Registered Types (the table at the bottom of the main page).
Click Delete next to the CPT you want to remove.
What happens:
- The CPT definition is removed from WordPress options
- The CPT and its taxonomies are unregistered on next page load
- Existing posts and terms are NOT deleted — they remain in the database
If you want to fully remove all posts, delete them from the post list table before deleting the CPT registration.
Troubleshooting
My CSV isn’t uploading
- Check your PHP
upload_max_filesizeandpost_max_sizesettings inphp.ini - For large files, also increase
max_execution_time
My columns are being assigned the wrong types
- Override any suggestion using the radio buttons on the Analyse Columns screen
- The plugin’s heuristics are guides, not hard rules
Taxonomy terms aren’t being created
- Check the multi-value delimiter setting matches what’s in your data
- If your terms contain commas, use a different delimiter (pipe
|recommended)
Import ran but I don’t see the CPT in the menu
- Try refreshing the page — this triggers re-registration on
init - Check Tools → CPT CSV Importer → Registered Types to confirm the CPT is listed
Duplicate posts are being created
- Switch duplicate handling to “Skip existing” or “Update existing”
- Duplicate detection is based on post title — ensure your title column has consistent values between imports
Next Steps
- Frontend Form: Collecting Submissions from Visitors — set up a public or members-only submission form
- Field Management, Settings, and Email Configuration — control field order, required fields, confirmation emails, and edit links
