{"id":194207,"date":"2024-07-08T13:22:01","date_gmt":"2024-07-08T13:22:01","guid":{"rendered":"https:\/\/de.wordpress.org\/plugins\/unused-media-checker\/"},"modified":"2026-08-20T20:54:00","modified_gmt":"2026-08-20T20:54:00","slug":"unused-media-checker","status":"publish","type":"plugin","link":"https:\/\/gu.wordpress.org\/plugins\/unused-media-checker\/","author":22043640,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Unused Media Checker","header_author":"DerWebfuchs.de","header_description":"This plugin checks for unused media in your WordPress media library.","assets_banners_color":"375b69","last_updated":"2026-08-20 20:54:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/derwebfuchs.de\/wordpress-mediathek-aufraumen-unused-media-checker\/","header_author_uri":"https:\/\/derwebfuchs.de\/","rating":5,"author_block_rating":0,"active_installs":200,"downloads":3847,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"derwebfuchsde","date":"2024-07-08 16:12:35"},"1.3.3":{"tag":"1.3.3","author":"derwebfuchsde","date":"2025-05-04 16:59:02"},"1.3.4":{"tag":"1.3.4","author":"derwebfuchsde","date":"2025-12-05 15:07:36"},"1.3.5":{"tag":"1.3.5","author":"derwebfuchsde","date":"2025-12-09 23:13:02"},"1.3.6":{"tag":"1.3.6","author":"derwebfuchsde","date":"2025-12-18 14:59:39"},"1.3.7":{"tag":"1.3.7","author":"derwebfuchsde","date":"2026-07-22 22:27:44"},"1.4.0":{"tag":"1.4.0","author":"derwebfuchsde","date":"2026-08-20 20:54:00"}},"upgrade_notice":{"1.4.0":"<p>Introduces a resumable batch scan to prevent timeouts on large Media Libraries.<\/p>","1.3.7":"<p>Adds Quick\/Thorough scan modes and deep scan options, plus significant performance improvements (caching and reduced query load).<\/p>","1.3.6":"<p>Photo Gallery (10Web) improvements: warning in Media Library unused list + improved motif grouping for imported Media Library variants.<\/p>","1.3.5":"<p>Improved pagination after deletions and better UX for single-item deletes. Recommended for a smoother cleanup workflow.<\/p>","1.3.4":"<p>Important compatibility update for WordPress 6.9 with more accurate detection of unused media and improved bulk deletion UX. Please update.<\/p>","1.3.3":"<p>Minor code optimizations and removal of unused assets.<\/p>","1.3.0":"<p>Major update: Inspect button, AdvancedAds support, performance improvements.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3657802,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3657802,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3657767,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3657802,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3657802,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.4.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[3786,210,84,187,17749],"plugin_category":[50,52],"plugin_contributors":[252468],"plugin_business_model":[],"class_list":["post-194207","plugin","type-plugin","status-publish","hentry","plugin_tags-cleanup","plugin_tags-gallery","plugin_tags-media","plugin_tags-optimization","plugin_tags-unused","plugin_category-media","plugin_category-performance","plugin_contributors-derwebfuchsde","plugin_committers-derwebfuchsde"],"banners":{"banner":"https:\/\/ps.w.org\/unused-media-checker\/assets\/banner-772x250.png?rev=3657802","banner_2x":"https:\/\/ps.w.org\/unused-media-checker\/assets\/banner-1544x500.png?rev=3657802","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/unused-media-checker\/assets\/icon.svg?rev=3657767","icon":"https:\/\/ps.w.org\/unused-media-checker\/assets\/icon.svg?rev=3657767","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<h4>English<\/h4>\n\n<p>Unused Media Checker helps you identify, inspect, and safely remove unused media files from your WordPress Media Library.<\/p>\n\n<p>The Media Library scan runs in small, resumable batches instead of one long request. This reduces the risk of gateway timeouts on sites with large media libraries. If the scan page is closed or reloaded, returning to the page resumes the saved scan progress.<\/p>\n\n<p>Version 1.4.0 has been tested on development and staging installations with Media Libraries containing more than 6,000 files. Actual scan time depends on the hosting environment, content volume and enabled integrations.<\/p>\n\n<p>The plugin analyzes your site and lists attachments that are <em>not<\/em> referenced in:<\/p>\n\n<ul>\n<li>Posts, pages, and all public custom post types (including featured images\/thumbnails)<\/li>\n<li>Post content (Gutenberg blocks and classic content with <code>wp-image-ID<\/code> classes)<\/li>\n<li>Direct image URLs from the uploads folder (<code>wp-content\/uploads\/...<\/code>)<\/li>\n<li>Advanced Ads (media referenced via the <code>advanced_ads_media<\/code> meta)<\/li>\n<li>Theme Customizer (site logo, site icon, header image, background image \u2013 including retina variants)<\/li>\n<li>Rank Math FAQ blocks (images stored in FAQ block attributes)<\/li>\n<li>Photo Gallery (10Web): optional filename-based warning in the unused list (usage is not mapped via attachment IDs)<\/li>\n<\/ul>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>Resumable AJAX batch scan with progress display for large Media Libraries<\/li>\n<li>Persistent scan snapshots for fast pagination and safer deletion checks<\/li>\n<li>Clear list of potentially unused attachments with thumbnails, title, date and quick \"Inspect\" link<\/li>\n<li>Accurate detection that respects logos, favicons, featured images and common SEO\/ads integrations<\/li>\n<li>Bulk delete with nonce protection and clear success messages \u2013 no unexpected white screens<\/li>\n<li>Safe individual delete buttons per item with confirmation dialog<\/li>\n<li>Pagination and list rendering powered by WordPress's native <code>WP_List_Table<\/code> class<\/li>\n<li>Optional Photo Gallery (10Web) helpers:\n\n<ul>\n<li>Media Library warning when a file with the same name exists in Photo Gallery<\/li>\n<li>Photo Gallery files report (uploads\/photo-gallery\/) with grouping and an \"unused motif\" filter<\/li>\n<\/ul><\/li>\n<li>Fully translation-ready via the textdomain <code>unused-media-checker<\/code><\/li>\n<\/ul>\n\n<h4>Deutsch<\/h4>\n\n<p>Unused Media Checker hilft Ihnen, ungenutzte Dateien in Ihrer WordPress\u2011Mediathek zu identifizieren, zu \u00fcberpr\u00fcfen und sicher zu entfernen.<\/p>\n\n<p>Der Mediathek-Scan l\u00e4uft in kleinen, fortsetzbaren Arbeitsschritten statt in einer einzigen langen Anfrage. Dadurch sinkt bei gro\u00dfen Mediatheken das Risiko eines Gateway-Timeouts. Wird die Scan-Seite geschlossen oder neu geladen, setzt das Plugin den gespeicherten Fortschritt beim n\u00e4chsten Aufruf fort.<\/p>\n\n<p>Version 1.4.0 wurde in Entwicklungs- und Staging-Installationen mit Mediatheken mit mehr als 6.000 Dateien getestet. Die tats\u00e4chliche Scandauer h\u00e4ngt vom Hosting, dem Inhaltsumfang und den aktivierten Integrationen ab.<\/p>\n\n<p>Das Plugin analysiert Ihre Website und listet Anh\u00e4nge, die <em>nicht<\/em> referenziert werden in:<\/p>\n\n<ul>\n<li>Beitr\u00e4gen, Seiten und allen \u00f6ffentlichen Custom Post Types (inkl. Beitragsbilder\/Thumbnails)<\/li>\n<li>Beitragsinhalten (Gutenberg\u2011Bl\u00f6cke und klassischer Editor mit <code>wp-image-ID<\/code>\u2011Klassen)<\/li>\n<li>Direkt eingebundenen Bild\u2011URLs aus dem Uploads\u2011Ordner (<code>wp-content\/uploads\/...<\/code>)<\/li>\n<li>Advanced Ads (Medien im Meta\u2011Feld <code>advanced_ads_media<\/code>)<\/li>\n<li>Theme\u2011Customizer (Website\u2011Logo, Website\u2011Icon, Header\u2011Bild, Hintergrundbild \u2013 inkl. Retina\u2011Varianten)<\/li>\n<li>Rank\u2011Math\u2011FAQ\u2011Bl\u00f6cken (Bilder in den FAQ\u2011Block\u2011Attributen)<\/li>\n<li>Photo Gallery (10Web): optionaler Dateinamen\u2011Hinweis in der Unused\u2011Liste (Nutzung wird nicht \u00fcber Attachment\u2011IDs gemappt)<\/li>\n<\/ul>\n\n<p>Funktionen:<\/p>\n\n<ul>\n<li>Fortsetzbarer AJAX-Batch-Scan mit Fortschrittsanzeige f\u00fcr gro\u00dfe Mediatheken<\/li>\n<li>Persistente Scan-Snapshots f\u00fcr schnelle Paginierung und sicherere L\u00f6schpr\u00fcfungen<\/li>\n<li>\u00dcbersichtliche Liste potenziell ungenutzter Anh\u00e4nge mit Vorschaubild, Titel, Datum und \"Inspect\"\u2011Link<\/li>\n<li>Pr\u00e4zise Erkennung, die Logos, Favicons, Beitragsbilder und g\u00e4ngige SEO\/Ads\u2011Integrationen ber\u00fccksichtigt<\/li>\n<li>Massenl\u00f6schung mit Nonce\u2011Schutz und klaren Erfolgsmeldungen \u2013 keine unerwarteten wei\u00dfen Seiten<\/li>\n<li>Sicheres, einzelnes L\u00f6schen je Datei mit Best\u00e4tigungsdialog<\/li>\n<li>Massenaktionen und Paginierung basierend auf der WordPress\u2011Klasse <code>WP_List_Table<\/code><\/li>\n<li>Optionale Photo Gallery (10Web) Hilfen:\n\n<ul>\n<li>Warnhinweis in der Mediathek\u2011Unused\u2011Liste, wenn ein gleichnamiges File in Photo Gallery existiert<\/li>\n<li>Report f\u00fcr Photo Gallery Dateien (uploads\/photo-gallery\/) inkl. Gruppierung und Filter \u201eNur ungenutzte Motive\u201c<\/li>\n<\/ul><\/li>\n<li>\u00dcbersetzungsbereit \u00fcber die Textdomain <code>unused-media-checker<\/code> (z.\u202fB. Deutsch, Englisch und weitere Sprachen)<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin processes site content and media information locally in the WordPress installation. It does not send scan data to an external service. Scan progress and result snapshots are stored in the site's WordPress database.<\/p>\n\n<h3>Support<\/h3>\n\n<p>For issues or questions, visit:\nhttps:\/\/derwebfuchs.de\/wordpress-mediathek-aufraumen-unused-media-checker\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>In the WordPress admin, go to Plugins &gt; Add New Plugin &gt; Upload Plugin and select the ZIP.<\/li>\n<li>Activate the plugin through the Plugins menu.<\/li>\n<li>Open Unused Media Checker &gt; Media Library.<\/li>\n<li>Select the desired scan mode and integrations under Unused Media Checker &gt; Settings.<\/li>\n<li>Click \"Start new scan\" and wait until the new result snapshot is complete.<\/li>\n<li>Inspect the results and begin with a small deletion batch.<\/li>\n<\/ol>\n\n<p>Create a full backup of the database and uploads directory before permanently deleting media. Testing the cleanup on a staging site first is strongly recommended.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20deleting%20unused%20media%20files%20affect%20my%20site%3F\"><h3>Will deleting unused media files affect my site?<\/h3><\/dt>\n<dd><p>No. Only files identified as unused are listed. Use the \u201cInspect\u201d button to verify before removal.<\/p><\/dd>\n<dt id=\"why%20aren%E2%80%99t%20my%20advancedads%20images%20listed%3F\"><h3>Why aren\u2019t my AdvancedAds images listed?<\/h3><\/dt>\n<dd><p>Media used in AdvancedAds is automatically detected and excluded from the list.<\/p><\/dd>\n<dt id=\"do%20i%20need%20any%20settings%3F\"><h3>Do I need any settings?<\/h3><\/dt>\n<dd><p>No. The plugin provides defaults, while the settings page lets you choose the scan mode and optional integrations.<\/p><\/dd>\n<dt id=\"why%20does%20the%20scan%20run%20in%20several%20steps%3F\"><h3>Why does the scan run in several steps?<\/h3><\/dt>\n<dd><p>Large scans can exceed PHP, proxy or web-server request limits. Version 1.4.0 processes the scan in small AJAX batches and stores its progress. If the page is closed or reloaded, return to Unused Media Checker &gt; Media Library to resume the scan.<\/p><\/dd>\n<dt id=\"can%20the%20plugin%20scan%20a%20large%20media%20library%3F\"><h3>Can the plugin scan a large Media Library?<\/h3><\/dt>\n<dd><p>Version 1.4.0 has been tested with more than 6,000 media files on development and staging installations. Results and scan times can vary depending on hosting resources, site content and enabled integrations.<\/p><\/dd>\n<dt id=\"why%20did%20deleting%20media%20not%20immediately%20reduce%20my%20hosting%20storage%3F\"><h3>Why did deleting media not immediately reduce my hosting storage?<\/h3><\/dt>\n<dd><p>Items moved to the Media Library trash may still consume storage until they are permanently deleted. WordPress also creates resized variants, and hosting storage counters may update with a delay. Ask your hosting provider what is included in its storage calculation.<\/p><\/dd>\n<dt id=\"should%20i%20create%20a%20backup%20first%3F\"><h3>Should I create a backup first?<\/h3><\/dt>\n<dd><p>Yes. Back up the database and uploads directory and, where possible, test permanent deletion on a staging site first.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Changed the Media Library scan to a resumable, AJAX-based batch process to prevent gateway timeouts on large sites.<\/li>\n<li>Added persistent scan snapshots for fast pagination, inspection and safe deletion.<\/li>\n<li>Added scan progress, automatic resume after reloading the page and stale-result detection after content changes.<\/li>\n<li>Clarified progress and completion details with checked-media and unused-media totals; previous results are hidden while a new scan runs.<\/li>\n<li>Improved deletion safety by requiring a current completed scan.<\/li>\n<li>Performance-tested with more than 6,000 media files on development and staging installations.<\/li>\n<li>Tested with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.3.7<\/h4>\n\n<ul>\n<li>New scan modes:\n\n<ul>\n<li>Quick scan (faster, may miss usage) \u2014 trash only<\/li>\n<li>Thorough scan (recommended) \u2014 can delete permanently<\/li>\n<\/ul><\/li>\n<li>New deep scan options (Thorough scan only): Widgets and Uploaded-to<\/li>\n<li>Performance: conservative caching for aggregated \"used attachment IDs\" and cache invalidation on relevant content changes<\/li>\n<li>Performance: reduced DB query load in Media Library list rendering<\/li>\n<li>Performance: improved cache-miss scan performance for large sites<\/li>\n<li>Inspect: cached detected usage sources for faster repeated inspections<\/li>\n<li>Developer: optional profiling output via ?umc_profile=1 to diagnose slow scans (time, queries, cache hit\/miss)<\/li>\n<li>Fix: improved PHP 8+ compatibility for cache invalidation hooks<\/li>\n<\/ul>\n\n<h4>1.3.6<\/h4>\n\n<ul>\n<li>Photo Gallery (10Web): show a warning in the Media Library unused list when a file with the same name exists in Photo Gallery<\/li>\n<li>Photo Gallery (10Web) files report: improved motif grouping so imported Media Library variants (imported_from_media_libray\/.original + thumb) are grouped consistently<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>Improved pagination UX after deletions:\n\n<ul>\n<li>stay on the current page when deleting a single item<\/li>\n<li>automatically fall back to the last valid page if a page becomes empty<\/li>\n<li>only show the \"No unused media found\" message when all unused items are really gone<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Tested with WordPress 6.9 and updated compatibility headers<\/li>\n<li>Fixed nonce handling for bulk actions to avoid \"Security check failed\" errors from unrelated POST requests<\/li>\n<li>Prevented blank pages after deletion and improved success notices directly on the Unused Media Checker screen<\/li>\n<li>Greatly improved detection of <em>used<\/em> media:\n\n<ul>\n<li>scans all public post types (not only posts\/pages)<\/li>\n<li>detects direct image URLs from the uploads folder<\/li>\n<li>includes Theme Customizer media (logo, site icon, header\/background images, retina variants)<\/li>\n<li>recognizes images used in Rank Math FAQ blocks<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<p>Removed unused CSS\/JS \u2013 now relies on native List Table styles<\/p>\n\n<p>Updated version and README<\/p>\n\n<h4>1.3.2<\/h4>\n\n<p>Removed script.js and style.css enqueue<\/p>\n\n<h4>1.3.1<\/h4>\n\n<p>Added Inspect button before delete<\/p>\n\n<h4>1.3.0<\/h4>\n\n<p>Database queries with LIMIT\/OFFSET<\/p>\n\n<p>WP_List_Table integration<\/p>\n\n<p>AdvancedAds support<\/p>\n\n<p>Centralized capability and nonce checks<\/p>","raw_excerpt":"Identify, inspect and delete unused media files in your media library, including integrations for Advanced Ads and Photo Gallery (10Web).","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/194207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=194207"}],"author":[{"embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/derwebfuchsde"}],"wp:attachment":[{"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=194207"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=194207"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=194207"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=194207"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=194207"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/gu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=194207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}