Skip to the document
DocsStart here

Migrating from another folder plugin

You see what will happen before it happens, nothing is taken from the other plugin, and the whole import can be undone from the same screen.

VergeLabs Library → Import folders.

What it reads #

Seven plugins, plus CSV as an eighth source:

SourceWhere it keeps folders
Folders (Premio)A taxonomy
HappyFilesA taxonomy
Wicked FoldersA taxonomy
WP Media Folder (JoomUnited)A taxonomy
WP Media Folders (Damien Barrère)A taxonomy
FileBirdIts own fbv and fbv_attachment_folder tables
Real Media LibraryIts own tables
A CSV fileSee Folders as a spreadsheet

Enhanced Media Library is not on the list because it is not an import: this plugin is a fork of it, and its settings are copied across when you activate. See Coming from Enhanced Media Library.

Every source is normalised into one internal shape — folders as id → { name, parent }, files as folder id → attachment ids — and the plan, the chunked run and the undo all work on that shape without knowing where it came from. That is why a CSV inherits all of the same safety without being a second importer.

How an import runs #

1. It shows you the plan first. How many folders, how many file assignments, and — the part that matters — which incoming folders will merge with folders you already have rather than being created beside them.

2. It runs in chunks. 500 rows at a time by default, filterable with vergeml_import_chunk. It cannot time out on shared hosting, and you can watch it count.

3. Nothing is taken from the source plugin. FileBird's tables still have everything in them when the import finishes. You can keep both installed while you click around, and switch back at any time.

4. Undo is on the same screen. Every import is logged (the vergeml_imports option) with exactly what it created, so undoing it removes what it did and nothing else.

Coming from Enhanced Media Library specifically #

This plugin is a fork of EML, so the path is shorter than an import.

Activating this plugin copies EML's settings across automatically: taxonomies, taxonomy options, library and filter options, custom MIME types, ordering, gallery options. EML's own wpuxss_eml_* options are left untouched, so rolling back still finds its settings exactly as they were.

Your files do not move at all — EML also used media_category, so every term assignment is already in the right place.

Order of operations:

  1. Deactivate Enhanced Media Library.
  2. Activate VergeLabs Media Library.
  3. Click through your library once — the toolbar, the list view, the media modal inside a post.
  4. Then delete EML.

If you install this one before deactivating EML, your site does not break. Every function, class, option, script handle and AJAX action carries its own prefix. You will simply see each taxonomy twice until you deactivate EML.

This path has its own test suite — eighteen checks against a real EML 2.9.4 install with settings moved off their defaults, terms created and files filed. See Compatibility.

Folders as a spreadsheet #

The same screen writes your whole structure out as CSV and reads it back.

The format is one row per assignment:

folder,attachment_id,filename
Clients/Acme/2024,1841,acme-hero.jpg
Clients/Acme/Logos,,
  • Slashes separate levels, so a nested tree survives the round trip.
  • A row with no attachment id is an empty folder. Without those, an empty folder would vanish on the way out and never come back.
  • The filename column is for you, not for the importer — it is written on export so a human can read the file, and ignored on import.

Limits: 200,000 rows, 12 levels deep.

This is how you build two hundred folders without two hundred clicks, and it is also how you take your structure somewhere else.

Taking a folder out as a ZIP #

Any folder can be downloaded as a single archive, with sub-folders included as directories, named after the folder. Right-click the folder in the tree → Download as ZIP.

Leaving #

Deleting this plugin leaves your folders in place — they are media_category terms in WordPress's own tables. Any other plugin that reads that taxonomy picks them up.

That is the point of the taxonomy decision, and it cuts both ways on purpose.

Written from version 3.15.0 of the plugin. Last updated 2026-10-02. All documentation · Legal · Support