How to Import Posts from CSV to WordPress

Have you ever had to upload loads of content in one go to WordPress? I have. It involved lots of copying and pasting, multiple tabs and lot’s of coffee.

This got me thinking: surely there is a quick way to do this. Turns out there is.

Drum roll please: spreadsheets.

Spreadsheets are a great way to automate aspects of your workflow and bulk uploading content to WordPress is no different.

How to Import Posts from CSV to WordPress

If you have a WordPress site, chances are you plan your content strategy in a spreadsheet. This can be as complex as mapping keywords to content with search volume data, or as simple as post ideas and title.

No matter the level of depth your sheet goes into, chances are there’s a few posts in there. Adding them manually will take time. Too much time.

This article will show you how to import content from a spreadsheet into a WordPress post. The good thing about this is you only need two things:

  • A Spreadsheet: Google Sheets or Excel
  • This Free Plugin: Really Simple CSV Importer

Step 1

Install and activate the Really Simple CSV Importer plugin. Once it’s activated, go to Tools » Import and click on CSV.

You will then be asked to upload a CSV file with the posts you want to import.

Step 2

You need to format your spreadsheet so the right fields will be imported.

The plugin pulls post info based on columns in your sheet. The first row must contain column names that the plugin recognises.

Some of the most common column names used are:

  • Post_title
  • Post_content
  • Post_date
  • Post_author
  • Post_type
  • Post_status
[The full list of column names is at the bottom of this article.]

NOTE: You do not need to have all the columns. You don’t even need them in a particular order.

Step 3

Now you want to organise your spreadsheet. Add in the content you to import like so:

By default, post type is set to posts and post status is set to draft. You can change this in post_status column.

Once finished, download your sheet in CSV format.

Step 4

Go back to WordPress, and back into the CSV importer plugin. Click on the choose file button and select you CSV file.

The plugin will work it’s magic and upload it and import the posts into WordPress.

Step 5

Go check that things have imported correctly. If they have, nice one. If they haven’t check your column names and try again.

That’s all for now, hopefully this has helped you to import posts from CSV to WordPress. Aren’t spreadsheets wonderful?

As I mentioned, here is the complete list of all available column headings:

Column Names & Values

  • ID or post_id: (int) post id. This value is not required. The post ID is already exists in your blog, importer will update that post data. If the ID is not exists, importer will trying to create a new post with suggested ID.
  • post_author: (login or ID) The user name or user ID number of the author.
  • post_date: (string) The time of publish date.
  • post_content: (string) The full text of the post.
  • post_title: (string) The title of the post.
  • post_excerpt: (string) For all your post excerpt needs.
  • post_status: (‘draft’ or ‘publish’ or ‘pending’ or ‘future’ or ‘private’ or custom registered status) The status of the post. ‘draft’ is default.
  • post_password: (string) The password to protect the post. The password is limited to 20 characters.
  • post_name: (string) The slug of the post.
  • post_parent: (int) The post parent id. Used for page or hierarchical post type.
  • menu_order: (int)
  • post_type: (‘post’ or ‘page’ or any other post type name) (required) The post type slug, not labels.
  • post_thumbnail: (string) The uri or path of the post thumbnail. E.g. http://example.com/example.jpg or /path/to/example.jpg
  • post_category: (string, comma separated) slug of post categories
  • post_tags: (string, comma separated) name of post tags
  • tax_{taxonomy}: (string, comma separated) Any field prefixed with tax_ will be used as a custom taxonomy. Taxonomy must already exist. Entries are names or slugs of terms.
  • {custom_field_key}: (string) Any other column labels used as custom field
  • cfs_{field_name}: (string) If you would like to import data to custom fields set by Custom Field Suite, please add prefix cfs_ to column header name.
  • scf_{field_name}: (string) If you would like to import data to custom fields set by Smart Custom Fields, please add prefix scf_ to column header name.
  • comment_status: (‘closed’ or ‘open’) Default is the option ‘default_comment_status’, or ‘closed’.