Title: CSV Resumable Importer for Tainacan
Author: bauhaustech
Published: <strong>June 23, 2026</strong>
Last modified: June 23, 2026

---

Search plugins

![](https://ps.w.org/csv-resumable-importer-for-tainacan/assets/banner-772x250.png?
rev=3583877)

![](https://ps.w.org/csv-resumable-importer-for-tainacan/assets/icon.svg?rev=3583877)

# CSV Resumable Importer for Tainacan

 By [bauhaustech](https://profiles.wordpress.org/bauhaustech/)

[Download](https://downloads.wordpress.org/plugin/csv-resumable-importer-for-tainacan.1.0.0.zip)

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

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

## Description

This add-on registers an extra CSV importer in [Tainacan](https://tainacan.org/)
whose attachment processing is **resumable**: the files listed in the `special_attachments`
column are imported **one per background iteration**, instead of all at once.

It does **not** modify Tainacan core — it registers an additional importer through
the `tainacan-register-importers` hook, so it keeps working across Tainacan updates.

This is an independent add-on developed by Bauhaus Tech. It is **not affiliated 
with, endorsed by, or part of** the Tainacan project.

#### The problem it solves

A CSV import in which a single item has many attachments (e.g. 150 images in `special_attachments`)
fails with:

    ```
    PHP Fatal error: Maximum execution time of 360 seconds exceeded in .../class-wp-image-editor-imagick.php
    ```

…and then **restarts from the beginning, duplicating items**.

The stock Tainacan CSV importer imports **all** of an item’s attachments inside 
a single `after_inserted_item()` call. Each file triggers `wp_generate_attachment_metadata()`,
which generates thumbnails through Imagick — an expensive operation. The background
process only checks its soft time limit (~20s) **between** `task()` iterations; 
since the 150 attachments run inside a single iteration, that limit is never checked
mid-loop. The item alone exceeds PHP’s hard `max_execution_time`, the process dies
mid-task **without persisting progress**, and the cron healthcheck **re-dispatches
the batch from the last checkpoint** — recreating already-imported items.

#### How it works

Instead of importing attachments inline, this importer:

 1. **Queues** the item’s attachment paths/URLs (stored in a transient serialized together
    with the process state).
 2. Processes **one attachment per iteration**, staying on the current item until the
    queue is empty.

Because each attachment becomes its own iteration, the soft 20s limit applies **
between files**: the batch checkpoints regularly and the import becomes resumable.
Idempotency is reinforced by persisting the already-created item id, so a resume
continues the attachments instead of recreating the item.

#### Known limitations

Because this plugin **cannot modify Tainacan core**:

 * A single file whose processing alone exceeds `max_execution_time` still fails(
   pathological case).
 * Progress is still persisted at the core’s ~20s `handle()` checkpoint, not per
   iteration (forcing a per-iteration checkpoint would require changing `Background_Importer::
   task()` in core). A fatal **within the same 20s window** may reprocess what was
   done since the last checkpoint. The definitive fix is the equivalent change upstream
   in Tainacan.

## Installation

 1. Upload the `csv-resumable-importer-for-tainacan` folder to `/wp-content/plugins/`,
    or install the ZIP via **Plugins  Add New  Upload Plugin**.
 2. Activate **CSV Resumable Importer for Tainacan** in **Plugins**.
 3. Requires the **Tainacan** plugin to be installed and active.
 4. In **Tainacan  Importers**, choose **“CSV (resumable attachments)”** instead of
    the default CSV importer.

## FAQ

### Does it modify Tainacan core?

No. It registers an additional importer through Tainacan’s `tainacan-register-importers`
hook and subclasses the core CSV importer. Tainacan updates do not overwrite it.

### Are the import options different from the native CSV importer?

No. Delimiter, mapping, `server_path` and the special columns (`special_document`,`
special_thumbnail`, `special_attachments[|APPEND|REPLACE]`) work exactly as in the
native importer. Only the way attachments are processed changes.

### Is this an official Tainacan plugin?

No. It is an independent add-on by Bauhaus Tech, not affiliated with the Tainacan
project.

### Does it fix every possible timeout?

It removes the real-world cause (a single item importing many attachments in one
uninterruptible call). See “Known limitations” for the residual edge cases that 
would require a core change.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

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

Contributors

 *   [ bauhaustech ](https://profiles.wordpress.org/bauhaustech/)
 *   [ Fred Marvila ](https://profiles.wordpress.org/marvila/)

[Translate “CSV Resumable Importer for Tainacan” into your language.](https://translate.wordpress.org/projects/wp-plugins/csv-resumable-importer-for-tainacan)

### Interested in development?

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

## Changelog

#### 1.0.0

 * Initial release. Resumable CSV importer that processes `special_attachments` 
   one per background iteration.

## Meta

 *  Version **1.0.0**
 *  Last updated **1 month ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.9 or higher **
 *  Tested up to **7.0.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [attachments](https://wordpress.org/plugins/tags/attachments/)[csv](https://wordpress.org/plugins/tags/csv/)
   [importer](https://wordpress.org/plugins/tags/importer/)[tainacan](https://wordpress.org/plugins/tags/tainacan/)
 *  [Advanced View](https://wordpress.org/plugins/csv-resumable-importer-for-tainacan/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

 *   [ bauhaustech ](https://profiles.wordpress.org/bauhaustech/)
 *   [ Fred Marvila ](https://profiles.wordpress.org/marvila/)

## Support

Got something to say? Need help?

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