{"id":316078,"date":"2026-06-15T09:59:47","date_gmt":"2026-06-15T09:59:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/unused-media-finder\/"},"modified":"2026-06-15T18:11:23","modified_gmt":"2026-06-15T18:11:23","slug":"mediaspy","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/mediaspy\/","author":22020053,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Mediaspy - Detect & Clean Unused Media","header_author":"Masum Ahmad","header_description":"Find unused media, detect hotlinks, and clean wasted storage in your WordPress media library.","assets_banners_color":"44596e","last_updated":"2026-06-15 18:11:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/github.com\/devmasum52","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"masum52","date":"2026-06-15 09:59:36"},"1.0.1":{"tag":"1.0.1","author":"masum52","date":"2026-06-15 18:11:23"}},"upgrade_notice":{"1.0.1":"<p>Recommended update. Internal refactor (MVC + Vue + REST) plus security hardening of the ZIP import. Same features and scan accuracy as 1.0.0.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3572849,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3572849,"resolution":"772x250","location":"assets","locale":"","width":3048,"height":981}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Scan results - stat cards showing total, used, unused, and wasted space","2":"Grid view - file cards with quick Delete and View actions on hover","3":"List view - full table with file type, size, date, and actions","4":"View Details modal - every post, page, and setting that references a file","5":"Search and sort controls"}},"plugin_section":[],"plugin_tags":[3786,17705,84,233,219749],"plugin_category":[50],"plugin_contributors":[267200],"plugin_business_model":[],"class_list":["post-316078","plugin","type-plugin","status-publish","hentry","plugin_tags-cleanup","plugin_tags-disk-space","plugin_tags-media","plugin_tags-media-library","plugin_tags-unused-media","plugin_category-media","plugin_contributors-masum52","plugin_committers-masum52"],"banners":{"banner":"https:\/\/ps.w.org\/mediaspy\/assets\/banner-772x250.jpg?rev=3572849","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mediaspy\/assets\/icon-256x256.gif?rev=3572849","icon_2x":"https:\/\/ps.w.org\/mediaspy\/assets\/icon-256x256.gif?rev=3572849","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Mediaspy scans your entire WordPress site and shows you which media files are not used anywhere. Review the results, then delete what you don't need - one by one or all at once.<\/p>\n\n<p><strong>Why Mediaspy?<\/strong><\/p>\n\n<p>Most plugins check only post content. Mediaspy checks everything - page builders, widgets, theme CSS, customizer settings, code snippets, and more - before calling a file unused.<\/p>\n\n<h4>What gets scanned<\/h4>\n\n<ul>\n<li>Post and page content<\/li>\n<li>Featured images<\/li>\n<li>Page builder data (Elementor, Divi, WPBakery, Kadence, and more)<\/li>\n<li>Theme CSS files<\/li>\n<li>Widget and Customizer settings<\/li>\n<li>Code snippet plugins (WPCode, Code Snippets, FluentSnippets)<\/li>\n<li>Plugin options stored in the database<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Scan your full media library<\/strong> - every image, video, audio file, PDF, archive, and document<\/li>\n<li><strong>See where each file is used<\/strong> - click any file to see every page, post, or setting referencing it<\/li>\n<li><strong>Grid and List view<\/strong> - browse results as cards or a full table<\/li>\n<li><strong>Filter by file type<\/strong> - Images, Videos, Audio, PDFs, Archives, Documents<\/li>\n<li><strong>Search by filename<\/strong> - find any file instantly<\/li>\n<li><strong>Sort by size or date<\/strong> - tackle the biggest space wasters first<\/li>\n<li><strong>Bulk delete<\/strong> - select multiple files and delete with one click<\/li>\n<li><strong>Download ZIP<\/strong> - back up unused files before deleting<\/li>\n<li><strong>Import ZIP<\/strong> - restore a previously exported archive back into your library<\/li>\n<li><strong>Live sync<\/strong> - uploads and deletions made elsewhere reflect instantly, no re-scan needed<\/li>\n<li><strong>Zero performance impact<\/strong> - only runs when you click Scan Now, nothing loads on the front end<\/li>\n<\/ul>\n\n<h4>Works with<\/h4>\n\n<p>Gutenberg, Elementor, Divi, WPBakery, Kadence Blocks, Beaver Builder, Brizy, Oxygen, Bricks, ACF, WooCommerce, and any builder that stores data in post meta or options.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Go to <strong>Plugins -&gt; Add New<\/strong> in your WordPress admin<\/li>\n<li>Search for <strong>Mediaspy<\/strong><\/li>\n<li>Click <strong>Install Now<\/strong> then <strong>Activate<\/strong><\/li>\n<li>Go to <strong>Media -&gt; Mediaspy<\/strong> and click <strong>Scan Now<\/strong><\/li>\n<\/ol>\n\n<h4>Manual install<\/h4>\n\n<ol>\n<li>Download the ZIP file<\/li>\n<li>Go to <strong>Plugins -&gt; Add New -&gt; Upload Plugin<\/strong><\/li>\n<li>Upload the ZIP and click <strong>Install Now<\/strong><\/li>\n<li>Activate the plugin<\/li>\n<li>Go to <strong>Media -&gt; Mediaspy<\/strong> and click <strong>Scan Now<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20it%20safe%20to%20delete%20files%3F\"><h3>Is it safe to delete files?<\/h3><\/dt>\n<dd><p>Mediaspy checks every file against your full database before marking it unused. Even so, always take a site backup before bulk-deleting. Use the <strong>Download ZIP<\/strong> button to save a copy of unused files before you delete them.<\/p><\/dd>\n<dt id=\"what%20if%20a%20file%20shows%20unused%20but%20i%20can%20see%20it%20on%20my%20site%3F\"><h3>What if a file shows unused but I can see it on my site?<\/h3><\/dt>\n<dd><p>Some plugins store data in custom database tables that Mediaspy does not scan (for example, certain booking or events plugins). If you can see a file on your site, do not delete it. Use the search bar to find and skip it.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%2C%20divi%2C%20or%20other%20page%20builders%3F\"><h3>Does it work with Elementor, Divi, or other page builders?<\/h3><\/dt>\n<dd><p>Yes. Mediaspy reads the raw post meta where builders store their data, and also scans global plugin settings in the database.<\/p><\/dd>\n<dt id=\"does%20it%20detect%20images%20used%20in%20the%20site%20editor%20or%20as%20css%20backgrounds%3F\"><h3>Does it detect images used in the Site Editor or as CSS backgrounds?<\/h3><\/dt>\n<dd><p>Yes. The scanner reads Global Styles and handles JSON-escaped URLs, so background images set through the Site Editor are correctly detected.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. The plugin is admin-only. Nothing runs on public-facing pages. The scan only starts when you click <strong>Scan Now<\/strong>.<\/p><\/dd>\n<dt id=\"can%20i%20get%20a%20deleted%20file%20back%3F\"><h3>Can I get a deleted file back?<\/h3><\/dt>\n<dd><p>No - deletion is permanent. Use <strong>Download ZIP<\/strong> to save a backup before deleting if you are unsure.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multisite%3F\"><h3>Does it support Multisite?<\/h3><\/dt>\n<dd><p>Not in this version. Mediaspy is designed for single-site installations.<\/p><\/dd>\n<dt id=\"how%20long%20does%20a%20scan%20take%3F\"><h3>How long does a scan take?<\/h3><\/dt>\n<dd><p>Under 5 seconds for most sites. Libraries with 5,000+ files may take up to 30 seconds.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Refactor: rebuilt on a modular MVC structure with PSR-4 services and Composer autoloading<\/li>\n<li>New admin interface built with Vue 3 and bundled with Vite<\/li>\n<li>Scan, delete, usage details, export and import now run over the REST API (replacing admin-ajax)<\/li>\n<li>Security: hardened the ZIP import - reject path-traversal entries (Zip-Slip), extract outside the web root, and cap archive size and file count against decompression bombs<\/li>\n<li>Security: removed an over-eager import de-duplication step that could delete unrelated media sharing the same filename<\/li>\n<li>Added uninstall cleanup (removes the cached scan, transients and temporary export\/import folders)<\/li>\n<li>Refreshed the header branding with the Mediaspy logo<\/li>\n<li>Source files normalised to ASCII (fixes garbled comment characters)<\/li>\n<li>No change to detection accuracy or everyday workflow<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Full media library scan with 6-layer usage detection<\/li>\n<li>Grid and list view with search, filters, and sorting<\/li>\n<li>Bulk delete, Download ZIP, and Import ZIP<\/li>\n<li>View Details modal showing every usage location per file<\/li>\n<li>Live two-way sync with the WordPress Media Library<\/li>\n<\/ul>","raw_excerpt":"Find unused files in your WordPress media library and safely delete them to free up disk space.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/316078","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=316078"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/masum52"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=316078"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=316078"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=316078"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=316078"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=316078"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=316078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}