Media Hygiene
The Media Hygiene plugin removes unused media from the WordPress library to free up space, reduce clutter, and improve server performance. With features like bulk delete and deep folder scanning, it’s a must-have for finding and deleting unused images and media. Introducing Media Hygiene Introducing the Media Hygiene plugin – the ideal solution for optimizing your WordPress media library! With this powerful plugin, you can quickly and easily remove all unused images, reducing clutter, and freeing up valuable server space. This plugin is a must-have for anyone looking to delete unused images in WordPress or remove unused images from the media library. Media Hygiene is fully compatible with major WordPress builders, including plugins like WooCommerce, custom fields and posts plugin, sliders, SEO, and more – making it versatile and convenient for all types of WordPress users. Unique features like “One shot delete” and “One-shot download” allow you to bulk delete media and download all images from the WordPress media library make it easy to keep your media library organized and up-to-date. Making offsite backups? Reduce the time and cost of disk space with a smaller backup file size. Say goodbye to a cluttered and disorganized WordPress media library, and hello to a cleaner, more efficient WordPress site! Whether you’re an agency, blogger, photographer, or business owner, Media Hygiene is the perfect tool for keeping your media library in tip-top shape. Get it now and keep your WordPress site super clean! Some use cases for website owners Unable to keep track of unused media files in the media library. Uploading the same images in different sizes to figure out optimal size and forgetting which one was actually used. Switching out an image in a post with another and can’t find it media library file. Updating the logo with a new version and don’t want the old one to be indexed by Google. Images included with purchased theme but never deleted after site was launched. After a website was redesigned or rebranded, there may a number of old images or media files no longer in use. Before migrating to a new hosting provider, cleaning up the media library may make it a smoother and faster migration process. Getting a warning from your hosting provider that you are hitting the storage limit, make your backups smaller. You have guest posts or contributors who may have left behind a number of images. Changing your product listings or discontinuing products in e-commerce sites may mean images are left unused. After trying out a theme, deactivation of theme may leave behind media files. How is it Different? Media Hygiene Pro scans the entire website using a number of different techniques. One way is to “visualize images/media in page source code” to confirm the existence of a media file even when builders/plugins/themes use specialized custom posts to display their widgets on-screen. File Types: Media Hygiene will recognize most if not all major file types stored in the WordPress media library. This includes but not limited to PDF, jpg, png, gif, mp4, mp3, csv, zip, rar, and txt files. We also cover alternative extension spelling such as jpeg. Standard Features: Dashboard – shows list of all unused media by occupied space and by type. Notifications – get email notifications when new files have been uploaded and not scanned on a specific schedule (daily, weekly, bi-weekly, monthly, quarterly) Site builder compatibility – works with all major site builders such as Elementor (see list below). Whitelist – keep files safe from deletion. Perfect for files linked to from off-site sources. Filtering – files by name and date. Backup – download unused media file individually or by page. Delete – remove files individually or by page. Scan – scanning process for all media files not linked to any page/post or other theme settings. Support – only through WordPress repository. Changelog Check latest here Compatibility Please check our website to see a completely list of compatible plugins/themes. Gutenberg – Standard Elementor Basic – Standard Bricks (builder) Divi (builder) WP Bakery Page Builder (builder) Beaver Builder (builder) Visual Composer (builder) Avada (theme) Enfold (theme) Flatsome (theme) More to come… Pro (available now) Customer Support – directly from the plugin – Pro Faster scanning through the use of WP-CLI (WordPress command line interface) Unique scanning process for multiple page builders with one click Advanced Filtering – Pro Media Filter by Year Media Filter by Type (jpg, png, gif, wmv, mp4, etc.) One Shot Download (all files) One Shot Removal (all files) Folder Scan (sub-folder scanning coming soon!) Woocommerce Custom Post Types SEO Plugins All in One Yoast SEO Press Custom Fields Plugins – Pro ACF Pods Custom Field Suite Custom Post Suits Sliders Meta Slider Slider Revolution Pro (coming soon) Custom Fields Plugins – Pro Jet Engine (coming soon) Meta Box (coming soon) CPT UI (coming soon) Remote server backup and restore – Pro (coming soon) Scheduled Scans – Pro (coming soon) Custom Email Notifications – Pro (coming soon) WPML / Weglot / TranslatePress (coming soon)
Top keywords
- media30×3.67%
- files12×1.47%
- wordpress12×1.47%
- images11×1.34%
- library11×1.34%
- media library10×1.22%
- pro10×1.22%
- coming9×1.10%
- coming soon9×1.10%
- soon9×1.10%
- unused9×1.10%
- builder8×0.98%
WP-Sweep
WP-Sweep finds the rows WordPress leaves behind and removes them. Revisions of posts you edited years ago, meta belonging to a post that was deleted, terms attached to nothing, term relationships pointing at posts that no longer exist, expired transients: none of it is visible anywhere in wp-admin, and all of it is in your database. It uses the proper WordPress delete functions wherever they can reach the row, rather than running raw delete queries, so the hooks other plugins rely on still fire. Only the rows the API refuses to touch — orphaned meta whose object ID is 0 — are deleted directly. Features Revisions Auto drafts Deleted posts Unapproved comments Spammed comments Deleted comments Orphaned post meta Orphaned comment meta Orphaned user meta Orphaned term meta Orphaned term relationships Unused terms Duplicated post meta Duplicated comment meta Duplicated user meta Duplicated term meta Transient options oEmbed caches in post meta Optimizes database tables Delete functions used wp_delete_post_revision() wp_delete_post() wp_delete_comment() delete_post_meta() delete_comment_meta() delete_user_meta() delete_term_meta() wp_remove_object_terms() wp_delete_term() delete_transient() delete_site_transient() Known incompatibilities These plugins keep data in places WP-Sweep reads as orphaned. Protect their meta keys with the filters under Usage before sweeping. Custom Fonts Elementor Popup Builder MailPress Meta Slider Polylang Slider Revolution Viba Portfolio WPML Donations I spent most of my free time creating, updating, maintaining and supporting these plugins, if you really love my plugins and could spare me a couple of bucks, I will really appreciate it. If not feel free to use it without any obligations. Usage Every sweep is irreversible, so back your database up first. The screen lists every sweep with a short description of what it removes, how many items that is, and what proportion of the table they are. Tick the ones you want and use the Sweep bulk action, or use each row’s Sweep and Details buttons one at a time. Nothing on the screen needs JavaScript: the buttons are ordinary links and the bulk action is an ordinary form. There is no settings screen. The one thing worth tuning — how many items Details lists, 500 by default — is the wp_sweep_limit_details filter. The cap exists because the whole sample is held in memory and written into the page. WP-CLI wp sweep --all wp sweep revisions wp sweep revisions auto_drafts deleted_posts REST API All three routes need the activate_plugins capability. GET /wp-json/sweep/v1/count/ GET /wp-json/sweep/v1/details/ DELETE /wp-json/sweep/v1/sweep/ Item names revisions, `auto_drafts`, `deleted_posts`, `unapproved_comments`, `spam_comments`, `deleted_comments`, `transient_options`, `orphan_postmeta`, `orphan_commentmeta`, `orphan_usermeta`, `orphan_termmeta`, `orphan_term_relationships`, `unused_terms`, `duplicated_postmeta`, `duplicated_commentmeta`, `duplicated_usermeta`, `duplicated_termmeta`, `optimize_database`, `oembed_postmeta`. Filters wp_sweep_postmeta_whitelist (array) — post meta keys that must never be deleted, by the orphaned or the duplicated post meta sweep. * matches any run of characters. Default: empty. wp_sweep_commentmeta_whitelist (array) — the same, for comment meta. wp_sweep_usermeta_whitelist (array) — the same, for user meta. wp_sweep_termmeta_whitelist (array) — the same, for term meta. wp_sweep_excluded_taxonomies (array) — taxonomies left out of the orphaned term relationships sweep. Default: array( 'link_category' ). wp_sweep_excluded_termids (array) — term IDs left out of the unused terms sweep. Default: each taxonomy’s default term, plus any term that is the parent of another. wp_sweep_limit_details (int) — how many items a Details list shows. Default: 500. wp_sweep_defer_counts (bool) — whether the Sweep screen renders first and fetches its counts afterwards, one at a time. Return false to compute every count with the page, as versions before 2.0.1 always did. Default: true. wp_sweep_capability (string $capability, string $context) — the capability required. $context is one of sweep, ajax or rest. wp_sweep_total_count (int $count, string $name) — the total number of rows a sweep’s percentage is measured against. wp_sweep_count (int $count, string $name) — how many items a sweep would remove. wp_sweep_details (array $details, string $name) — the sample list shown by Details. wp_sweep_sweep (string $message, string $name) — the message reported after a sweep has run. Actions wp_sweep_admin_post_sweep, `wp_sweep_admin_comment_sweep`, `wp_sweep_admin_user_sweep`, `wp_sweep_admin_term_sweep`, `wp_sweep_admin_option_sweep` and `wp_sweep_admin_database_sweep` all fire below the sweep table, in that order. Protect specific post meta keys from being swept: add_filter( 'wp_sweep_postmeta_whitelist', function ( $meta_keys ) { $meta_keys[] = '_my_plugin_setting'; $meta_keys[] = '_acme_*'; return $meta_keys; } ); Exclude an additional taxonomy from the orphaned term relationships sweep: add_filter( 'wp_sweep_excluded_taxonomies', function ( $taxonomies ) { $taxonomies[] = 'product_type'; return $taxonomies; } );