Bauhaus File Cleanup for Tainacan
Tainacan does not reliably remove uploaded files from disk when items are permanently deleted. In particular, files of private items — which Tainacan stores in prefixed _x_<item_id> folders — are left orphaned in the uploads directory, slowly bloating disk usage. Tainacan’s own code documents this as an unresolved TODO (Private_Files::rename_item_and_collection_folder_path returns early on permanent deletion).
This add-on fixes that. While it is active, permanently deleting an item always removes its files by default. You can disable this behaviour from Settings → Bauhaus File Cleanup for Tainacan if you need to temporarily keep files while the plugin stays active.
This is an independent add-on developed by Bauhaus Tech. It is not affiliated with, endorsed by, or part of the Tainacan project.
It works by hooking WordPress’ before_delete_post, which fires on every permanent deletion regardless of where it was triggered:
- the Tainacan admin trash (REST API);
- the bulk-edit “delete” background process;
- the WordPress admin “Empty Trash”;
- WP-CLI (
wp tainacan ...garbage collector); - any other
wp_delete_post( $id, true )call.
For each deleted Tainacan item it:
- Deletes the remaining attachment posts (document, child attachments, thumbnail) forcing real file removal (bypassing the media trash).
- Removes the item’s dedicated upload folder recursively — covering WordPress-generated derivative image sizes and the private
_x_folders — by reconstructing the path from the item and collection IDs instead of trusting the (often out-of-sync) attachment metadata.
When a whole collection is permanently deleted, its entire tainacan-items/<collection_id> folder is removed too.
Important notes
- This is destructive and irreversible: files are deleted from disk, not sent to a trash. This is intentional — it is what the plugin exists to do.
- Each Tainacan item owns an isolated upload folder, so deleting it does not affect other items. The plugin does not scan metadata for attachments shared across items; if you reuse a single attachment across multiple items, deleting one item may remove that shared file.
- Sending an item to the trash does nothing — cleanup only happens on permanent deletion.
