Este plugin no se ha probado con las últimas 3 versiones mayores de WordPress. Puede que ya no tenga soporte ni lo mantenga nadie, o puede que tenga problemas de compatibilidad cuando se usa con las versiones más recientes de WordPress.

Really Simple CSV Importer


Alternative CSV Importer plugin. Simple and powerful, best for geeks.

  • Category support
  • Tag support
  • Custom field support
  • Smart Custom Fields support
  • Custom Field Suite support
  • Advanced Custom Fields support
  • Custom Taxonomy support
  • Custom Post Type support
  • Filter hook for dry-run-testing
  • Filter hooks for customize csv data before importing to database
  • Action hook for update post data after importing to database

You can get example CSV files in /wp-content/plugins/really-simple-csv-importer/sample directory.

Available column names and 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. 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’.

Note: Empty cells in the csv file means “keep it”, not “delete it”.
Note: To set the page template of a page, use custom field key of _wp_page_template.
Note: If providing a post_status of ‘future’ you must specify the post_date in order for WordPress to know when to publish your post.
Note: If the post_type value is attachment, you can use post_thumbnail field to define media URL or path.

Advanced Custom Fields plugin integrate

If advanced custom field key is exists, importer will trying to use update_field function instead of built-in add_post_meta function.
How to find advanced custom field key: Finding the field key

Official public repository

Add star and read future issues about rs-csv-importer on GitHub!


Cover banner designed by @luchino__

How to debug import data

Really Simple CSV Importer Debugger add-on enables you to dry-run-testing and show more detailed post, meta, taxonomy data of each csv row.
Download from gist.

How to customize import post data

There are three filters available in the importer.


This filter is applied to post data.


  • $post – (array)(required) post data
  • $is_update – (bool) update existing post data, or insert new post data


function really_simple_csv_importer_save_post_filter( $post, $is_update ) {

    // remove specific tag from import data
    if (isset($post['post_tags'])) {
        $_tags = array();
        foreach ($post['post_tags'] as $tag) {
            if ($tag != 'Apple') {
                $_tags[] = $tag;
        $post['post_tags'] = $_tags;

    return $post;
add_filter( 'really_simple_csv_importer_save_post', 'really_simple_csv_importer_save_post_filter', 10, 2 );


This filter is applied to post meta data.


  • $meta – (array)(required) post meta data
  • $post – (array) post data
  • $is_update – (bool)


function really_simple_csv_importer_save_meta_filter( $meta, $post, $is_update ) {

    // serialize metadata
    $meta_array = array();
    if (isset($meta['meta_key_1'])) $meta_array[] = $meta['meta_key_1'];
    if (isset($meta['meta_key_2'])) $meta_array[] = $meta['meta_key_2'];
    $meta = array( 'meta_key' => $meta_array );

    return $meta;
add_filter( 'really_simple_csv_importer_save_meta', 'really_simple_csv_importer_save_meta_filter', 10, 3 );


This filter is applied to post taxonomy data (categories and tags are not included, these are post data).


  • $tax – (array)(required) post taxonomy data
  • $post – (array) post data
  • $is_update – (bool)


function really_simple_csv_importer_save_tax_filter( $tax, $post, $is_update ) {

    // Fix misspelled taxonomy
    if (isset($tax['actors'])) {
        $_actors = array();
        foreach ($tax['actors'] as $actor) {
            if ($actor == 'Johnny Dep') {
                $actor = 'Johnny Depp';
            $_actors[] = $actor;
        $tax['actors'] = $_actors;

    return $tax;
add_filter( 'really_simple_csv_importer_save_tax', 'really_simple_csv_importer_save_tax_filter', 10, 3 );


This filter is applied to thumbnail data.


  • $post_thumbnail – (string)(required) the thumbnail file path or distant URL
  • $post – (array) post data
  • $is_update – (bool)


function really_simple_csv_importer_save_thumbnail_filter( $post_thumbnail, $post, $is_update ) {

    // Import a local file from an FTP directory
    if (!empty($post_thumbnail) && file_exists($post_thumbnail)) {
        $upload_dir   = wp_upload_dir();
        $target_path  = $upload_dir['path'] . DIRECTORY_SEPARATOR . basename($post_thumbnail);
        if (copy($post_thumbnail, $target_path)) {
            $post_thumbnail = $target_path;

    return $post_thumbnail;
add_filter( 'really_simple_csv_importer_save_thumbnail', 'really_simple_csv_importer_save_thumbnail_filter', 10, 3 );

How to customize the post data after importing to database


This action provides availability to run some tasks after importing.

Example: Download image from remote url to custom field (Download from gist)

How to customize the importing process entirely


This filter provides availability to completely replace the RS_CSV_Importer#save_post method.

Example: Update row based on a custom field ID/key match (Download from gist)


  1. Upload All files to the /wp-content/plugins/ directory.
  2. Activate the plugin through the ‘Plugins’ menu in WordPress.
  3. Go to the Import page under Tools menu.
  4. Click CSV link, read the notification, then just upload and import.

Preguntas frecuentes

Installation Instructions
  1. Upload All files to the /wp-content/plugins/ directory.
  2. Activate the plugin through the ‘Plugins’ menu in WordPress.
  3. Go to the Import page under Tools menu.
  4. Click CSV link, read the notification, then just upload and import.
Should I fill all columns of post data?

No. Only columns which you want to update.

Can I update existing post data?

Yes. Please use ID field to specify the existing post.

Can I insert post with specific post id?

Yes. Please use ID field to specify the new post ID.

Can I import custom field/custom taxonomy of the post?

Yes. You can use column names same as wp_post table, but if the column name does not match, it creates a custom field (post meta) data. Importing custom taxonomy is a bit more complicated, “tax_{taxonomy}” means, “tax_” is prefix, and {taxonomy} is name of custom taxonomy (not labels).

Here is an example.

csv file
“Captain Phillips”,”2013″,”Tom Hanks, Barkhad Abdi, Barkhad Abdirahman”

imported post data
Post Title: Captain Phillips
Custom field “released”: 2013
Custom taxonomy “Actors”: Tom Hanks, Barkhad Abdi, Barkhad Abdirahman

Why should I quote text cells when I save csv file?

Because PHP cannot read multibyte text cells in some cases.

Locale setting is taken into account by this function. If LANG is e.g. en_US.UTF-8, files in one-byte encoding are read wrong by this function.

Can I insert multiple values to CFS or ACF fields like Select or Checkbox?

Yes. Please create additional plugin and use really_simple_csv_importer_save_meta filter to make array data.

Add-on development example


22 de abril de 2021
Most CSV import plugins add the CPT updates, and Taxonomies, as Premium features. This tool is so small and accomplishes our needs perfectly. Great combination with MetaBox, which we are suing
10 de mayo de 2020
It does what it was described to do, and it does it extremely well. Also, despite the plugin being last updated five years ago (from the time of this review), it works flawlessly in May 2020. Love it, it saved me so much time!!! ⭐⭐⭐⭐⭐
26 de agosto de 2019
This CSV importer should be the Top #1 in the WordPress repository. But since it's not been updated and review as much as others it doesn't even appear in search results. What a pity. It works really great. You can even import Custom Post Types and Taxonomies. It's installed as an import tool (under Tools in the admin menu). Meaning it doesn't bloat you Dashboard with shitty menus and a bad chosen icon. It seems ther's a minor issue. Sometimes the plugin crashes the browser. But there's a workaround: open the importer, wait 5s, then you can continue. Thanks Takuro Hishikawa.
Leer todas las 104 reseñas

Colaboradores y desarrolladores

Este software es de código abierto. Las siguientes personas han contribuido a este plugin.


"Really Simple CSV Importer" ha sido traducido a 1 idioma local. Gracias a los traductores por sus contribuciones.

Traduce "Really Simple CSV Importer" a tu idioma.

¿Interesado en el desarrollo?

Revisa el código, echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios


  • Some Enhancements (Thanks @piwi!)
    • Attachment support
    • Add “really_simple_csv_importer_save_thumbnail” Filter
    • French translations
  • Support post date GMT
  • Support post password


  • Enhancement: Smart Custom Fields support
  • Check if the provided post status is already registered


  • Enhancement: Support localization
  • Bug fixes


  • Enhancement: Replace a helper class to more better one
  • Enhancement: Add action hook
  • Bug fixes


  • Enhancement: Remove Byte Order Mark automatically (Thanks lucianosantana!)


  • Fix error on PHP 5.2


  • Bug fix: enables to import “0” value


  • Enhancement: Custom Field Suite support
  • Enhancement: Add ability to override save_post method
  • Performance Improvements


  • Enhancement: Add dry run filter


  • Bug fix: Fails to update empty custom field value.


  • Bug fix: Fix to enable to update post meta values.


  • Enhancement: Check the post type is already exists.
  • Update readme


  • New feature: Add Post Thumbnail support
  • Bug fixes


  • Enhancement: Check whether both posts has same post type when updating.


  • New feature: Added filter hooks to customize import data


  • Post title bug fix


  • Version fix


  • New feature: Added custom taxonomy support. (Thanks chuckhendo!)


  • New feature: Advanced Custom Fields integrate.
  • Enhancement: Use post_id if not already present when inserting post.


  • New feature: Add post_id column. It enables to update post data.
  • Some bug fixes


  • Bug fix


  • First Release (beta)