{"id":301929,"date":"2026-05-03T11:34:44","date_gmt":"2026-05-03T11:34:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/deep-media-tracker\/"},"modified":"2026-05-03T17:24:23","modified_gmt":"2026-05-03T17:24:23","slug":"progmaze-media-scanner","status":"publish","type":"plugin","link":"https:\/\/ms.wordpress.org\/plugins\/progmaze-media-scanner\/","author":23482007,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"ProgMaze Media Scanner","header_author":"ProgMaze","header_description":"Deep scan of where every media file is used\u2014posts, pages, Gutenberg blocks, post meta, and builders. Find unused attachments, view full usage, and delete or detach safely.","assets_banners_color":"0f1c2a","last_updated":"2026-05-03 17:24:23","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/progmaze.com\/","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/progmaze-media-scanner\/","header_author_uri":"https:\/\/progmaze.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"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":"progmaze","date":"2026-05-03 17:24:23"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3521471,"resolution":"128x128","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3521471,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3521471,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Main media grid showing used\/unused status badges and action buttons.","2":"Usage detail modal showing every post\/page using a media file with type badges and direct links.","3":"Scan progress bar during a full site scan."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[148076,163,84,233,187],"plugin_category":[50,52],"plugin_contributors":[261724,261725,193471],"plugin_business_model":[],"class_list":["post-301929","plugin","type-plugin","status-publish","hentry","plugin_tags-gutenberg","plugin_tags-images","plugin_tags-media","plugin_tags-media-library","plugin_tags-optimization","plugin_category-media","plugin_category-performance","plugin_contributors-progmaze","plugin_contributors-ranaumar7899","plugin_contributors-wpvirtuoso","plugin_committers-progmaze"],"banners":{"banner":"https:\/\/ps.w.org\/progmaze-media-scanner\/assets\/banner-772x250.png?rev=3521471","banner_2x":"https:\/\/ps.w.org\/progmaze-media-scanner\/assets\/banner-1544x500.png?rev=3521471","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/progmaze-media-scanner\/assets\/icon-128x128.png?rev=3521471","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Need to know which posts, builders, or meta fields still reference an image\u2014or which uploads are safe to remove?<\/p>\n\n<p><strong>ProgMaze Media Scanner<\/strong> runs a <strong>deep scan<\/strong> of your site: it walks public post types (including templates), reads <code>post_content<\/code> and <code>post_meta<\/code>, parses Gutenberg-style block data, URLs, featured images, and nested serialized or JSON values so you get a clear picture of <strong>where each file is used<\/strong> and what is <strong>unused<\/strong>.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Full site scan<\/strong> \u2014 Scans all post types, pages, custom post types, templates, and reusable blocks.<\/li>\n<li><strong>Gutenberg aware<\/strong> \u2014 Parses block JSON attributes (core\/image, core\/gallery, core\/cover, core\/video, core\/file, core\/media-text, and more) to find media IDs.<\/li>\n<li><strong>Page builder support<\/strong> \u2014 Scans media used in Gutenberg, Avada, Elementor, and similar setups that store IDs or URLs in content or meta.<\/li>\n<li><strong>Featured image tracking<\/strong> \u2014 Detects when a media item is used as a featured image on any post or custom post type.<\/li>\n<li><strong>Post meta scanning<\/strong> \u2014 Finds media in ACF fields, WooCommerce product galleries, and other plugins that store attachment IDs or URLs in meta.<\/li>\n<li><strong>Usage detail view<\/strong> \u2014 Open any item to see every post that uses it, with Edit and View links and usage type (content, featured image, meta, gallery, setting).<\/li>\n<li><strong>Safe deletion<\/strong> \u2014 Only unused media can be deleted directly; used items can be detached first or removed with <strong>Detach &amp; Delete<\/strong>.<\/li>\n<li><strong>Bulk delete<\/strong> \u2014 Remove multiple unused items in one action.<\/li>\n<li><strong>Incremental updates<\/strong> \u2014 Saving a post re-scans that post only, keeping the cache fresh without a full rescan.<\/li>\n<li><strong>Filters<\/strong> \u2014 All \/ Used \/ Unused, mime type filters, and search by filename.<\/li>\n<li><strong>Library overview<\/strong> \u2014 On the main screen: total storage, image vs non-image space, space by file type (bars), largest uploads, and most-referenced media (cached for performance).<\/li>\n<\/ul>\n\n<h4>Supported for<\/h4>\n\n<ul>\n<li>WordPress Gutenberg (core blocks)<\/li>\n<li>Elementor<\/li>\n<li>Avada<\/li>\n<li>ACF (Advanced Custom Fields)<\/li>\n<li>WooCommerce (featured image + gallery)<\/li>\n<li>Builders that store media URLs or IDs in <code>post_content<\/code> or <code>post_meta<\/code><\/li>\n<\/ul>\n\n<h3>How it works<\/h3>\n\n<p>When you run <strong>Scan All Media<\/strong>, the plugin rebuilds its usage cache: it inspects content and meta for attachment IDs, upload URLs, <code>_thumbnail_id<\/code>, WooCommerce galleries, and nested structures. Each link is stored with a usage type. Saving a post triggers a targeted re-scan for that post only.<\/p>\n\n<p>On <strong>Media \u2192 ProgMaze Media Scanner<\/strong>, filter by used or unused, narrow by type, search by filename, use <strong>View Usage<\/strong> for details, and delete or <strong>Detach &amp; Delete<\/strong> as needed. Deletions are permanent\u2014back up first.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>progmaze-media-scanner<\/code> folder to <code>\/wp-content\/plugins\/<\/code> (or upload the ZIP in WP Admin).<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Media \u2192 ProgMaze Media Scanner<\/strong> in your admin menu.<\/li>\n<li>Click <strong>Scan All Media<\/strong> to run the first full scan.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20slow%20down%20my%20site%3F\"><h3>Does this slow down my site?<\/h3><\/dt>\n<dd><p>No. The scan runs when you click <strong>Scan All Media<\/strong> or when a post is saved\u2014not on normal front-end views.<\/p><\/dd>\n<dt id=\"how%20accurate%20is%20the%20detection%3F\"><h3>How accurate is the detection?<\/h3><\/dt>\n<dd><p>Very accurate for typical WordPress setups and the integrations listed above. Custom storage patterns may need manual judgment.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20click%20%22detach%20%26%20delete%22%3F\"><h3>What happens when I click \"Detach &amp; Delete\"?<\/h3><\/dt>\n<dd><p>Featured image references are cleared, <code>post_parent<\/code> is detached, usage rows are removed, then the attachment is permanently deleted.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20a%20deletion%3F\"><h3>Can I undo a deletion?<\/h3><\/dt>\n<dd><p>No. Back up before bulk deletes.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20multisite%3F\"><h3>Is it compatible with multisite?<\/h3><\/dt>\n<dd><p>Single-site tested; multisite is planned for a future release.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release as <strong>ProgMaze Media Scanner<\/strong> (distinct from other \u201cmedia tracker\u201d plugins; internal code prefixes unchanged).<\/li>\n<\/ul>","raw_excerpt":"Deep scan of where media is used site-wide; find unused library files and delete or detach them safely.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/301929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=301929"}],"author":[{"embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/progmaze"}],"wp:attachment":[{"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=301929"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=301929"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=301929"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=301929"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=301929"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ms.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=301929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}