Importundo

Reference

Supported fields

Every field a column can be mapped to, and exactly what the importer accepts in it.

Header names in the "Recognised headers" column are what the auto-mapper looks for. Matching ignores case, spaces, underscores and hyphens, so Post Title, post_title, POST-TITLE and posttitle are all the same header.

Post fields

FieldRecognised headersAcceptsNotes
Post IDid, post_idIntegerUsed only to match an existing post. A row never creates a post with a chosen ID. If the ID does not exist, or belongs to a different post type, the row is treated as unmatched.
Titletitle, post_title, name, headline, subjectAny textStored as-is. HTML in a title is escaped by WordPress on output.
Contentcontent, post_content, body, description, textAny text, including HTML and shortcodesStored verbatim. Shortcodes are not executed at import time; they render normally on the front end. Block markup (<!-- wp:paragraph -->) is preserved.
Excerptexcerpt, post_excerpt, summary, teaserAny text
Slugslug, post_name, permalinkTextSanitised into a URL slug by WordPress. If two rows produce the same slug, WordPress appends -2, -3 and so on.
Statusstatus, post_status, stateSee belowDefaults to publish on creation when the column is absent or empty.
Datedate, post_date, published, created_atSee belowSets both the local and GMT date. When absent, WordPress uses the current time.
Authorauthor, post_author, user, creatorUser ID, login, email, or nicenameTried in that order. An unmatched author falls back to the user who started the import, and the preview warns first.
Parentparent, post_parent, parent_idPost ID or slugOnly offered for hierarchical post types. The parent must already exist and be the same post type. Unmatched parents import at the top level with a warning.
Menu ordermenu_order, order, sort, positionIntegerOnly offered for hierarchical post types. Non-numeric values become 0.
Passwordpassword, post_passwordTextA non-empty value makes the post password protected.
Comment statuscomments, comment_statusBoolean-ishopen, 1, yes, true, on, enabled mean open. Anything else means closed.
Ping statuspings, ping_status, trackbacksBoolean-ishSame rules as comment status.

Status values

Registered status slugs are accepted directly: publish, draft, pending, private, future, trash, plus any status another plugin has registered.

These synonyms are also accepted:

You writeYou get
published, public, live, 1, yes, truepublish
unpublished, 0, no, falsedraft
scheduledfuture
trashed, deletedtrash

A status label is also accepted, so an export that wrote "Pending Review" resolves correctly.

Anything unrecognised produces a warning and the row falls back to the default status rather than failing.

Date formats

With the date format left on Detect automatically, the importer tries in this order:

InputInterpreted as
1719792000 (9–11 digits)Unix timestamp, seconds
1719792000000 (12–14 digits)Unix timestamp, milliseconds
2024-07-01, 2024-07-01 14:30:00, 2024-07-01T14:30:00+02:00ISO 8601
25/07/2024 (first part > 12)Day/month/year
07/25/2024 (second part > 12)Month/day/year
03/04/2024 (ambiguous)Month/day/year, with a warning
3 March 2024, March 3, 2024, Mon, 03 Mar 2024 10:00:00 +0000Free text, via PHP's date parser

Ambiguous numeric dates are the one case worth attention. If your file came from a European system, add the Parse date transform to the column and set the source format to European / DD/MM/YYYY. That removes the guess entirely.

Dates are interpreted in your site's timezone, not the server's, and stored as both local and GMT. An unparseable date produces a warning and the row imports with the current date. It does not fail.

Taxonomies

Every taxonomy registered for the chosen post type is offered, including custom ones.

The auto-mapper recognises the taxonomy slug, its plural label and its singular label, so a column named Categories, category or cat all map to the built-in category taxonomy, and Tags or tag map to post tags.

Multiple terms are separated by commas:

News, Product updates, Company

A term containing a comma must be quoted, exactly as anywhere else in a CSV:

"Reports, quarterly", News

Hierarchical paths use >:

Fiction > Crime > Nordic

That assigns the row to Nordic, creating Fiction, Crime and Nordic in that nesting if they do not exist. In a flat taxonomy such as post tags, > is not a separator — the whole string becomes one term name.

Two settings govern the behaviour, both on the mapping step:

The preview marks every term that does not exist yet, so you see what a run will add to your taxonomy before it adds it.

Custom fields

Map any column to Custom field (meta key)… and type the key. Keys are restricted to letters, numbers, underscores and hyphens.

Values are stored as strings under that key with update_post_meta, replacing any existing value for the key. Serialised arrays are not built from a CSV cell — a cell is one value.

Fields belonging to Advanced Custom Fields are not mapped this way. ACF stores a second row beside every value saying which field owns it, so a value written as a plain custom field is one the field cannot see — they get their own heading on the mapping screen and their own handling. The ACF reference →

Featured image

FieldRecognised headersAccepts
Featured image URLimage, image_url, featured_image, thumbnail, photoAbsolute http/https URL, protocol-relative //host/path, or root-relative /path
Featured image alt textalt, alt_text, image_altAny text

Behaviour:

If a filename in the URL has no extension, the type is derived from the downloaded file itself.

Rows the importer handles rather than rejects

SituationWhat happens
Row has fewer columns than the headerMissing columns are treated as empty, with a warning
Row has more columns than the headerSurplus values are kept under generated names and left unmapped, with a warning
Row is blankSkipped silently, not counted
File has no header rowColumns are named column_1, column_2… and every row is data. Detected automatically, overridable
Header cell is blankThat column is named column_N, with a notice
Two header cells have the same nameThe second becomes name_2, the third name_3
File is UTF-8 with a byte order markThe mark is stripped, not imported into the first column name
File is Windows-1252Transcoded to UTF-8 as it is read
File contains only a header rowAccepted, with a notice that there is nothing to import

Field limits

The importer does not impose its own length limits. WordPress's database schema does: post_title, post_name and post_excerpt are TEXT columns, and post_name is truncated to 200 characters when the slug is generated. Content length is limited only by your MySQL max_allowed_packet.