Title: CSV Importer Improved
Author: Jason Judge
Published: <strong>December 17, 2015</strong>
Last modified: October 10, 2016

---

Search plugins

![](https://ps.w.org/csv-importer-improved/assets/banner-772x250.jpg?rev=1356049)

This plugin **hasn’t been tested with the latest 3 major releases of WordPress**.
It may no longer be maintained or supported and may have compatibility issues when
used with more recent versions of WordPress.

![](https://ps.w.org/csv-importer-improved/assets/icon-256x256.png?rev=1311249)

# CSV Importer Improved

 By [Jason Judge](https://profiles.wordpress.org/judgej/)

[Download](https://downloads.wordpress.org/plugin/csv-importer-improved.0.6.1.zip)

 * [Details](https://vec.wordpress.org/plugins/csv-importer-improved/#description)
 * [Reviews](https://vec.wordpress.org/plugins/csv-importer-improved/#reviews)
 *  [Installation](https://vec.wordpress.org/plugins/csv-importer-improved/#installation)
 * [Development](https://vec.wordpress.org/plugins/csv-importer-improved/#developers)

 [Support](https://wordpress.org/support/plugin/csv-importer-improved/)

## Description

This WordPress plugin imports posts from CSV (Comma Separated Value) files into 
your
 WordPress blog. It can prove extremely useful when you want to import a bunch
of posts from an Excel document or the like – simply export your document into a
CSV file and the plugin will take care of the rest.

https://wordpress.org/plugins/csv-importer-improved/

#### Features

 * Imports post title, body, excerpt, tags, date, categories etc.
 * Supports custom fields, custom taxonomies and comments
 * Deals with Word-style quotes and other non-standard characters using
    WordPress’
   built-in mechanism (same one that normalizes your input when you write your posts)
 * Columns in the CSV file can be in any order, provided that they have correct
   
   headings
 * Multi-language support

This plugin is forked from https://wordpress.org/plugins/csv-importer/ by dvkob

in order to keep up with changes to the core WordPress.

This importer writes directly to the database. It does not go through the internal

WordPress objects for creating posts etc. That may be an advantage to you (it will
be faster for large imports) but do be aware of any data integrity issues that may
arrise.

Only UTF-8 encoding is supported, both with and without Byte Order Marks (BOM).

The development repository for this plugin can be found here:

https://github.com/academe/csv-importer-improved

Please feel free to raise issues there, and submit pull requests, as well as through

the normal WordPress channels.

### Usage

Click on the CSV Importer link on your WordPress admin page, choose the
 file you
would like to import and click Import. The `examples` directory inside the plugin’s
directory contains several files that demonstrate how to use the plugin. The best
way to get started is to import one of these files and look at the results.

CSV is a tabular format that consists of rows and columns. Each row in
 a CSV file
represents a post; each column identifies a piece of information that comprises 
a post.

You can create new posts, or update existing posts by supplying the csv_post_id

field pointing to an existing post. When updating, all field names you provide in
the CSV file will be updated – even if blank – but fields you don’t list at the 
head of the CSV file will be left intact.

#### Basic post information

 * `csv_post_id` – optional, used to update an existing post.
 * `csv_post_title` – title of the post
 * `csv_post_post` – body of the post
 * `csv_post_type` – `post`, `page` or a custom post type.
    From 0.3.2, `csv_post_type`
   column supports custom post types. Refer to the WordPress [documentation on custom post types](https://codex.wordpress.org/Custom_Post_Types)
   for more info on how to set up custom post types.
 * `csv_post_excerpt` – post excerpt
 * `csv_post_categories` – a comma separated list of category names or ids.
    The
   list must be enclosed in quotes, e.g. “EC > UK, Island”. If a chain of subcategories
   does not exist, e.g. `Animalia > Chordata > Mammalia` then they will all be created
   and the post assigned to the end of the chain. The parent category can also be
   defined using its id, e.g. 42 > Primates > Callitrichidae, where `42` is an existing
   category id.
 * `csv_post_tags` – a “quoted” comma separated list of tags.
 * `csv_post_date` – most standard formats are supported.
    For example, `now`, `
   11/16/2009 0:00`, `1999-12-31 23:55:00`, `+1 week`, next Thursday, `last year`
   are all valid. For technical details, consult PHP’s `strtotime()` function [documentation](http://php.net/manual/en/function.strtotime.php).

#### Custom fields

Any column that doesn’t start with `csv_` is considered to be a custom field
 name.
The data in that column will be imported as the custom fields value.

All custom fields must be unique. Multiple fields with the same name will be
 updated
to the same value if updating an existing post. Prior to version 0.6.0 loading the
same field name multiple times to an existing post would create multiple custom 
fields.

#### General remarks

 * WordPress pages [don’t have categories or tags](https://codex.wordpress.org/Pages).
 * Most columns are optional. Either `csv_post_title`, `csv_post_post` or
    csv_post_excerpt
   are sufficient to create a post. If all of these columns are empty in a row, 
   the plugin will skip that row.
 * The plugin will attempt to reuse existing categories or tags; if an
    existing
   category or tag cannot be found, the plugin will create it.
 * To specify a category that has a greater than sign (>) in the name, use
    the 
   HTML entity `&gt;`

#### Advanced usage

 * `csv_post_author` – numeric user id or login name. If not specified or
    user 
   does not exist, the plugin will assign the posts to the user performing the import.
 * `csv_post_slug` – post slug used in permalinks.
 * `csv_post_parent` – post parent id.

### Custom taxonomies

**New in version 0.3.0**

Once custom taxonomies are set up in your theme’s functions.php file or
 by using
a 3rd party plugin, `csv_ctax_(taxonomy name)` columns can be used to assign imported
data to the taxonomies.

**Non-hierarchical taxonomies**

The syntax for non-hierarchical taxonomies is straightforward and is essentially

the same as the `csv_post_tags` syntax.

**Hierarchical taxonomies**

The syntax for hierarchical taxonomies is more complicated. Each hierarchical
 taxonomy
field is a tiny two-column CSV file, where _the order of columns matters. The first
column contains the name of the parent term and the second column contains the name
of the child term. Top level terms have to be preceded either by an empty string
or a 0 (zero).

Sample `examples/custom-taxonomies.csv` file included with the plugin
 illustrates
custom taxonomy support. To see how it works, make sure to set up custom taxonomies
from `functions.inc.php`.

Make sure that the quotation marks used as text delimiters in `csv_ctax_`
 columns
are regular ASCII double quotes, not typographical quotes like “ (U+201C) and ” (
U+201D).

### Comments

**New in version 0.3.1**

An example file with comments is included in the `examples` directory.
 In short,
comments can be imported along with posts by specifying columns such as `csv_comment_*
_author`, `csv_comment_*_content` etc, where * is a comment ID number. This ID doesn’t
go into WordPress. It is only there to have the connection information in the CSV
file.

### Credits

This plugin uses [php-csv-parser](http://code.google.com/p/php-csv-parser/) by Kazuyoshi
Tlacaelel.
 It was inspired by JayBlogger’s [CSV Import](http://www.jayblogger.com/the-birth-of-my-first-plugin-import-csv/)
plugin.

Contributors:

 * Kevin Hagerty (post_author support)
 * Edir Pedro (root category option and tableless HTML markup)
 * Frank Loeffler (comments support)
 * Micah Gates (subcategory syntax)
 * David Hollander (deprecation warnings, linebreak handling)

## Screenshots

 * [[
 * Plugin interface

## Installation

Installing the plugin:

 1. Unzip the plugin’s directory into `wp-content/plugins`.
 2. Activate the plugin through the ‘Plugins’ menu in WordPress.
 3. The plugin will be available under Tools -> CSV Importer on
     WordPress administration
    page.

## FAQ

> I have quotation marks and commas as values in my CSV file. How do I tell CSV
> 
> Importer to use a different separator?

It doesn’t really matter what kind of separator you use if your file is
 properly
escaped. To see what I mean by proper escaping, take a look at examples/sample.csv
file which has cells with quotation marks and commas.

If the software you use for exporting to CSV is unable to escape quotation
 marks
and commas, you might want to give [OpenOffice Calc](http://www.openoffice.org/)
a try.

> How can I import characters with diacritics, Cyrillic or Han characters?

Make sure to save your CSV file with utf-8 encoding.

Prior to version 6.0.4, MySQL [did not support](http://dev.mysql.com/doc/refman/5.1/en/faqs-cjk.html#qandaitem-24-11-1-13)
some rare Han characters. As
 a workaround, you can insert characters such as 𠊎(
U+2028E) by converting them to HTML entities – &#x2028e;

> I cannot import anything – the plugin displays “Imported 0 posts in 0.01
>  seconds.”

Update to version 0.3.1 or greater. Previous versions required write access to
 
the /tmp directory and the plugin failed if access was denied by PHP’s safe mode
or other settings.

> I’m importing a file, but not all rows in it are imported and I don’t see
>  a confirmation
> message. Why?

WordPress can be many things, but one thing it’s not is blazing fast. The
 reason
why not all rows are imported and there’s no confirmation message is that the plugin
times out during execution – PHP decides that it has been running too long and terminates
it.

There are a number of solutions you can try. First, make sure that you’re not
 using
any plugins that may slow down post insertion. For example, a Twitter plugin might
attempt to tweet every post you import – not a very good idea if you have 200 posts.
Second, you can break up a file into smaller chunks that take less time to import
and therefore will not cause the plugin to time out. Third, you can try adjusting
PHP’s `max_execution_time` option that sets how long scripts are allowed to run.
Description of how to do it is beyond the scope of this FAQ – you should search 
the web and/or use your web host’s help to find out how. However, putting the following
line in `.htaccess` file inside public_html directory works for some people:

  Sets max execution time to 2 minutes. Adjust as necessary.

php_value max_execution_time 120

The problem can be approached from another angle, namely instead of giving
 scripts
more time to run making them run faster. There’s not much I can do to speed up the
plugin (you can contact me at dvkobozev at gmail.com if you like to prove me wrong),
so you can try to speed up WordPress. It is a pretty broad topic, ranging from database
optimizations to PHP accelerators such as APC, eAccelerator or XCache, so I’m afraid
you’re on your own here.

> I receive the following error when I try to import my CSV file: “Invalid CSV
>  
> file: header length and/or row lengths do not match”. What’s wrong with your plugin/
> my file?

Short answer: update to version 0.2.0 or later. Longer answer: the number of
 fields(
values) in rows in your file does not match the number of columns. Version 0.2.0
pads such rows with empty values (if there are more columns than cells in a row)
or discards extra fields (if there are less columns than cells in a row).

> I’m getting the following error: `Parse error: syntax error, unexpected
>  T_STRING,
> expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in .../public_html/wp-content/
> plugins/csv-importer/File_CSV_DataSource/DataSource.php on line 61. What gives?

This plugin requires PHP5, while you probably have PHP4 or older. Update your
 PHP
installation or ask your hosting provider to do it for you.

## Reviews

![](https://secure.gravatar.com/avatar/ecaa9e5082290efc7c50dc6deb1a4954a1269668f9b35677c1286fc8a8642496?
s=60&d=retro&r=g)

### 󠀁[Still works!!!](https://wordpress.org/support/topic/still-works-195/)󠁿

 [Edgar Pfandler](https://profiles.wordpress.org/regnalf/) April 28, 2021 3 replies

Yes, it hasn’t been updated in a long time, but it still works like a dream. Even
with custom post types. For all the negative reviews with skipped rows. Only use
the columns you need!! If you don’t need categories or tags, just remove these columns!

![](https://secure.gravatar.com/avatar/cf69ef6155fa671d325c1ff87511ce86520ddb11768171560f1e08ef077f4d7d?
s=60&d=retro&r=g)

### 󠀁[not working](https://wordpress.org/support/topic/not-working-2782/)󠁿

 [Anonymous User 14293447](https://profiles.wordpress.org/anonymized-14293447/) 
January 10, 2019

Not working, no custom-fields, no categories, nothing… just a name and a description.
On to next one….

![](https://secure.gravatar.com/avatar/2d54a4319a9c4d2c24de9ba6186f2846add68005a8411fbe579b38d32591b15e?
s=60&d=retro&r=g)

### 󠀁[Skipped 10 posts (most likely due to empty title, body and excerpt).](https://wordpress.org/support/topic/skipped-10-posts-most-likely-due-to-empty-title-body-and-excerpt/)󠁿

 [tarunmahashwari](https://profiles.wordpress.org/tarunmahashwari/) February 15,
2017

neither i have any empty title, body and excerpt nor do i have add any custom field
or anything. still i am getting this error. this plugin is of no use

![](https://secure.gravatar.com/avatar/0711c896dbd03b0928ba708a4bc8ee46a975a9d439147e3392d1fb9f06221a8b?
s=60&d=retro&r=g)

### 󠀁[Fixed the issue I was experiencing with CSV Importer!](https://wordpress.org/support/topic/fixed-the-issue-i-was-experiencing-with-csv-importer/)󠁿

 [dcupery](https://profiles.wordpress.org/dcupery/) September 3, 2016

Works great! Custom taxonomy upload isn’t working however.

![](https://secure.gravatar.com/avatar/052a79eb113595d2104892175e3f1fdc8ef0c7df4aba01982f5679d3ecfce3c7?
s=60&d=retro&r=g)

### 󠀁[Thank you! Works perfectly](https://wordpress.org/support/topic/thank-you-works-perfectly-2/)󠁿

 [amanda.fskar](https://profiles.wordpress.org/amandafskar/) October 11, 2016

I have been using the CSV Importer that is no longer compatible and was trying to
use a different importer plugin…not sure which one. This one works great and is 
simpler than the other one I tried. This is a wonderful tool. Thanks so much for
keeping this thing running.

 [ Read all 5 reviews ](https://wordpress.org/support/plugin/csv-importer-improved/reviews/)

## Contributors & Developers

“CSV Importer Improved” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Jason Judge ](https://profiles.wordpress.org/judgej/)

[Translate “CSV Importer Improved” into your language.](https://translate.wordpress.org/projects/wp-plugins/csv-importer-improved)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/csv-importer-improved/),
check out the [SVN repository](https://plugins.svn.wordpress.org/csv-importer-improved/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/csv-importer-improved/)
by [RSS](https://plugins.trac.wordpress.org/log/csv-importer-improved/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.6.0

 * Change behaviour of custom fields; treat all fields as unique and don’t create
   duplicates.

#### 0.5.4

 * No functional changes; just a forced update after fixing some SVN issues.

#### 0.5.1

 * Fix incorrect intitial status.
 * Started making strings translatable.

#### 0.5.0

 * Update PHP version to 5.3+
 * Support updating existing posts.

#### 0.4.2

 * Renamed from “CSV Importer 2” to “CSV Importer Improved”.

#### 0.4.1

 * Fix some function name clashes with other CSV import plugins.

#### 0.4.0

 * Fixes to support WordPress 4.4

#### 0.3.8

 * Minor bug and security fixes

#### 0.3.7

 * Make hierarchical custom taxonomy line splitting more robust
 * Fix deprecation warnings

#### 0.3.6

 * Fix category cleanup bug

#### 0.3.5

 * Added ‘greater-than’ category syntax
 * Updated the docs

#### 0.3.4

 * Added csv_post_parent column
 * Updated the docs
 * Got rid of a deprecation warning

#### 0.3.3

 * Fixes incompatibility with versions of WordPress prior to 3.0 introduced
    in 
   previous release.

#### 0.3.2

 * Added ability to specify custom post type.

#### 0.3.1

 * Import comments.
 * Updated php-csv-parser – the plugin should no longer create files in /tmp.

#### 0.3.0

 * Custom taxonomies.

#### 0.2.4

 * Root category selection, cleaner HTML.

#### 0.2.3

 * Slight speed increase, support for post_author and post_name.

#### 0.2.2

 * Bugfix release to deal with BOM that may occur in UTF-8 encoded files.

#### 0.2.1

 * Ability to import rows as pages, not posts.
 * Starting with this version, you can also specify category ids instead of
    names.

#### 0.2.0

 * Ability to handle CSV files where the number of cells in rows does not
    match
   the number of columns
 * Smart date parsing
 * Code cleanup.

#### 0.1.3

 * New option to import posts with published status.

#### 0.1.2

 * Added support for post excerpts.

#### 0.1.1

 * Code cleanup
 * Changed column names for CSV input. Sorry if it breaks anything for you,
    folks,
   but it had to be done in order to allow for custom fields such as title ([All in One SEO Pack](https://wordpress.org/extend/plugins/all-in-one-seo-pack/)
   uses those, for example).

#### v0.1.0

 * Initial version of the plugin

## Meta

 *  Version **0.6.1**
 *  Last updated **10 years ago**
 *  Active installations **100+**
 *  WordPress version ** 3.0.0 or higher **
 *  Tested up to **4.6.30**
 *  Language
 * [English (US)](https://wordpress.org/plugins/csv-importer-improved/)
 * Tags
 * [batch](https://vec.wordpress.org/plugins/tags/batch/)[csv](https://vec.wordpress.org/plugins/tags/csv/)
   [excel](https://vec.wordpress.org/plugins/tags/excel/)[import](https://vec.wordpress.org/plugins/tags/import/)
   [spreadsheet](https://vec.wordpress.org/plugins/tags/spreadsheet/)
 *  [Advanced View](https://vec.wordpress.org/plugins/csv-importer-improved/advanced/)

## Ratings

 3.2 out of 5 stars.

 *  [  2 5-star reviews     ](https://wordpress.org/support/plugin/csv-importer-improved/reviews/?filter=5)
 *  [  1 4-star review     ](https://wordpress.org/support/plugin/csv-importer-improved/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/csv-importer-improved/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/csv-importer-improved/reviews/?filter=2)
 *  [  2 1-star reviews     ](https://wordpress.org/support/plugin/csv-importer-improved/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/csv-importer-improved/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/csv-importer-improved/reviews/)

## Contributors

 *   [ Jason Judge ](https://profiles.wordpress.org/judgej/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/csv-importer-improved/)