Unattached Media Manager
Makes WordPress's native Unattached Media filter trustworthy again
WordPress's Media Library has a built-in "Unattached" filter that's supposed to surface files not tied to any post. In practice it's unreliable: WordPress only marks media as attached when it was uploaded directly through the post editor, so anything inserted via ACF fields, Gutenberg blocks, page builders, widgets, theme options, or shortcodes gets flagged as unattached even though it's actively in use. Before you can safely clean up unused media, you first have to fix that false signal, which is the problem this plugin was built to solve.
The plugin runs a full-content scan across post content, ACF fields, Gutenberg blocks, Elementor, Meta Box, WooCommerce, and SEO plugin meta (Yoast, Rank Math, AIOSEO, SEOPress), then sets the correct post_parent on any media it finds actually referenced. Scanning runs in batches under one of three resource modes, Low, Auto, or High, so it won't time out shared hosting, and it can execute either browser-driven with live progress or as a WP-Cron background job that keeps running after the tab closes. A later release (1.0.9) added an advanced option to point the scanner at custom database tables that other plugins use for their own content storage, with each table/column entry validated against the live schema before any read-only query runs.
Once media is properly attached, WordPress's own tools work as intended again: the native Unattached filter actually shows unused files, and import/export plugins like WP All Import or Duplicator can correctly carry media along with its posts. Deletion is trash-first with a full change history and one-click revert, so the plugin is aimed at site owners and developers who want their media library's attachment data fixed at the source rather than papered over by yet another cleanup tool they have to keep installed.
What it does
Full-site reference scan
Scans post content, ACF fields, Gutenberg blocks, Elementor, Meta Box, WooCommerce, and SEO plugin meta to find every place a media file is actually used.
One-click attach fix
Sets the correct post_parent on any "used but unattached" media so WordPress's native Unattached filter and import/export tools behave correctly again.
Resource-aware batching
Processes scans and bulk operations in batches under Low, Auto, or High resource modes so shared hosting doesn't time out.
Two processing modes
Runs browser-driven with real-time progress or as a WP-Cron background job that continues after the browser tab is closed.
Trash-first deletion
Moves unused media to WordPress's trash before permanent deletion, with a full change history and one-click revert for any attachment change.
Developer hooks and CLI
Exposes an aioms_parsers filter for custom parsers, REST API endpoints, and WP-CLI commands for scripting scans and CSV exports.
Built with
FAQ
Will scanning slow down my site?
No. The scanner processes items in small batches and automatically adjusts its resource usage. Visitors to your site won’t notice any slowdown.
Can I close my browser during operations?
It depends on your chosen processing mode. With Browser-Driven mode (recommended), you need to keep the tab open. With Background (WP-Cron) mode , operations continue even after closing your browser — though this requires WP-Cron to be working properly on your site.
What if I accidentally delete something?
If you used “Move to Trash” instead of “Delete Permanently”, you can restore from the Trash view in the Unused Media tab. This is why we recommend always using Trash first.
What if I attached media incorrectly?
Go to the Change History tab and click Revert on any change. This will detach the media from the post it was attached to.
What happens if the scan gets stuck?
You can pause the scan at any time and resume it later. If something goes wrong, use the Stop button to reset and start fresh.