{"id":320807,"date":"2026-06-13T13:08:14","date_gmt":"2026-06-13T13:08:14","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sjf-cleaner\/"},"modified":"2026-07-26T23:00:33","modified_gmt":"2026-07-26T23:00:33","slug":"sjf-cleaner","status":"publish","type":"plugin","link":"https:\/\/bo.wordpress.org\/plugins\/sjf-cleaner\/","author":23510103,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.17","stable_tag":"1.3.17","tested":"7.0.2","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"SJF Cleaner","header_author":"Steve Julius Furthm\u00fcller \u00b7 SJF.solutions","header_description":"Free all-in-one WordPress cleanup tool by SJF.solutions: remove inactive plugin and theme leftovers, clean the database, find image duplicates, track unused media, manage orphaned draft media, find large files, analyse transients, fix broken attachments and check for broken links.","assets_banners_color":"212120","last_updated":"2026-07-26 23:00:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/furthmueller.info\/plugins\/sjf-cleaner\/","header_author_uri":"https:\/\/sjf.solutions","rating":0,"author_block_rating":0,"active_installs":0,"downloads":146,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.15":{"tag":"1.3.15","author":"sjfsolutions","date":"2026-06-13 13:31:36"},"1.3.17":{"tag":"1.3.17","author":"sjfsolutions","date":"2026-07-26 23:00:33"}},"upgrade_notice":{"1.3.15":"<p>Improves media duplicate selection and updates German translations.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3571064,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3571064,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3571069,"resolution":"1544x500","location":"assets","locale":"","width":2172,"height":724}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.15","1.3.17"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3571064,"resolution":"1","location":"assets","locale":"","width":1728,"height":824},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3571064,"resolution":"2","location":"assets","locale":"","width":1747,"height":860},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3571064,"resolution":"3","location":"assets","locale":"","width":1798,"height":884}},"screenshots":{"1":"Plugin Leftovers overview.","2":"Database Cleanup module.","3":"Media Duplicates module.","4":"Large Files module.","5":"URL Checker module.","6":"Broken Attachments module."}},"plugin_section":[],"plugin_tags":[4659,3786,153,732,84],"plugin_category":[50,52,59],"plugin_contributors":[266961],"plugin_business_model":[],"class_list":["post-320807","plugin","type-plugin","status-publish","hentry","plugin_tags-cleaner","plugin_tags-cleanup","plugin_tags-database","plugin_tags-maintenance","plugin_tags-media","plugin_category-media","plugin_category-performance","plugin_category-utilities-and-tools","plugin_contributors-sjfsolutions","plugin_committers-sjfsolutions"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sjf-cleaner\/assets\/icon-128x128.png?rev=3571064","icon_2x":"https:\/\/ps.w.org\/sjf-cleaner\/assets\/icon-256x256.png?rev=3571064","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sjf-cleaner\/assets\/screenshot-1.png?rev=3571064","caption":"Plugin Leftovers overview."},{"src":"https:\/\/ps.w.org\/sjf-cleaner\/assets\/screenshot-2.png?rev=3571064","caption":"Database Cleanup module."},{"src":"https:\/\/ps.w.org\/sjf-cleaner\/assets\/screenshot-3.png?rev=3571064","caption":"Media Duplicates module."}],"raw_content":"<!--section=description-->\n<p>SJF Cleaner is a free all-in-one cleanup tool for WordPress administrators.<\/p>\n\n<p>It helps you find typical technical leftovers in a WordPress installation and remove them in a controlled way. The plugin focuses on transparency: it shows what was found first, then lets you decide what should be deleted.<\/p>\n\n<p>No cleanup action runs automatically in the background. Always create a full backup of files and database before deleting files or database entries.<\/p>\n\n<h4>Main features<\/h4>\n\n<ul>\n<li>Plugin leftovers: list inactive plugin directories with file count, size and directory date.<\/li>\n<li>Database cleanup: remove revisions, auto-drafts, trashed posts, spam comments, orphaned meta data and expired transients.<\/li>\n<li>Media duplicates: find exact duplicate media files using MD5 hash comparison of the original file.<\/li>\n<li>Unused media: find media files not attached to posts and not referenced in content, featured images or post meta.<\/li>\n<li>Draft media: find media files attached to old unpublished draft content.<\/li>\n<li>Large files: list oversized images, videos and other uploads based on configurable thresholds.<\/li>\n<li>Themes: list installed themes and protect the active theme and parent theme from deletion.<\/li>\n<li>Transients: group transients by source prefix and show count, size and expired entries.<\/li>\n<li>Broken attachments: find media library entries whose file no longer exists on the server.<\/li>\n<li>URL checker: check links in published posts and pages for HTTP availability.<\/li>\n<\/ul>\n\n<h4>Free version<\/h4>\n\n<p>The free version is designed for manual WordPress maintenance. It helps you inspect cleanup candidates and run selected cleanup actions.<\/p>\n\n<p>For advanced automation, extended deletion workflows, unlimited URL cleanup, statistics, Multisite support and license management, SJF Cleaner Pro is available separately from SJF.solutions.<\/p>\n\n<h4>Security<\/h4>\n\n<ul>\n<li>All actions require administrator permission (<code>manage_options<\/code>).<\/li>\n<li>Cleanup requests are nonce-protected.<\/li>\n<li>Active plugins are protected from deletion.<\/li>\n<li>The active theme and parent theme are protected.<\/li>\n<li>No automatic cleanup runs without user action.<\/li>\n<li>User input is sanitized before processing.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> in your WordPress dashboard.<\/li>\n<li>Search for <strong>SJF Cleaner<\/strong> or upload the plugin ZIP file.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open <strong>Tools \u2192 SJF Cleaner<\/strong>.<\/li>\n<li>Review the scan results before deleting anything.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20sjf%20cleaner%20safe%20to%20use%3F\"><h3>Is SJF Cleaner safe to use?<\/h3><\/dt>\n<dd><p>The plugin is designed to show cleanup candidates first and only delete after manual confirmation. Still, cleanup tools can affect files and database content. Always create a full backup before running cleanup actions.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20deactivate%20the%20plugin%3F\"><h3>What happens when I deactivate the plugin?<\/h3><\/dt>\n<dd><p>You'll see a short optional feedback overlay asking why. You can skip it and deactivation proceeds normally either way. Your answer is stored locally in your WordPress database by default. Only if you actively check \"Send reason to the developer\" is it transmitted to furthmueller.info; your site URL is only included if you additionally check the second box. Nothing is sent automatically.<\/p><\/dd>\n<dt id=\"does%20sjf%20cleaner%20delete%20anything%20automatically%3F\"><h3>Does SJF Cleaner delete anything automatically?<\/h3><\/dt>\n<dd><p>No. The free version does not run automatic cleanup jobs in the background. Every cleanup action must be triggered manually.<\/p><\/dd>\n<dt id=\"are%20active%20plugins%20protected%3F\"><h3>Are active plugins protected?<\/h3><\/dt>\n<dd><p>Yes. Active plugins are protected in the Plugin Leftovers module and cannot be deleted from there.<\/p><\/dd>\n<dt id=\"are%20active%20themes%20protected%3F\"><h3>Are active themes protected?<\/h3><\/dt>\n<dd><p>Yes. The active theme and its parent theme are protected.<\/p><\/dd>\n<dt id=\"how%20are%20duplicate%20media%20files%20detected%3F\"><h3>How are duplicate media files detected?<\/h3><\/dt>\n<dd><p>SJF Cleaner compares original media files by MD5 hash. Only exact file duplicates are treated as duplicates. Thumbnails and generated image sizes are ignored.<\/p><\/dd>\n<dt id=\"why%20can%20scans%20take%20some%20time%3F\"><h3>Why can scans take some time?<\/h3><\/dt>\n<dd><p>Large media libraries, many database rows or many links can take longer to scan. The runtime depends on your hosting environment and the size of your WordPress installation.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20collect%20external%20data%3F\"><h3>Does the plugin collect external data?<\/h3><\/dt>\n<dd><p>No. SJF Cleaner does not send your cleanup data to SJF.solutions or any external service.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.17<\/h4>\n\n<ul>\n<li>Fix: Deactivation feedback opt-in now correctly submits to the developer endpoint (previous endpoint URL was outdated).<\/li>\n<\/ul>\n\n<h4>1.3.16<\/h4>\n\n<ul>\n<li>New: Optional deactivation feedback overlay. When you click \"Deactivate\" in the plugins list, you can briefly tell us why (multiple-choice + free text) before deactivation proceeds. Deactivation is never blocked, even without giving a reason.<\/li>\n<li>Privacy: Feedback is stored locally on your site by default. Only if you explicitly opt in (checkbox) is the reason sent to the developer; your site URL is only included if you opt in a second time. No automatic \"phone home\".<\/li>\n<\/ul>\n\n<h4>1.3.15<\/h4>\n\n<ul>\n<li>Media duplicates: selection checkboxes moved to the first table column.<\/li>\n<li>German translation file updated.<\/li>\n<li>Readme text cleaned up for WordPress.org.<\/li>\n<\/ul>\n\n<h4>1.3.14<\/h4>\n\n<ul>\n<li>UX: added checkboxes and bulk selection for exact media duplicates.<\/li>\n<\/ul>\n\n<h4>1.3.13<\/h4>\n\n<ul>\n<li>Bugfix: checkboxes for unlinked media stay visible; preview remains available.<\/li>\n<\/ul>\n\n<h4>1.3.12<\/h4>\n\n<ul>\n<li>UX: replaced browser alert for database selection with an inline notice.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added Broken Attachments module.<\/li>\n<li>Added URL Checker module.<\/li>\n<li>Improved duplicate scan using MD5 hash comparison.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Free all-in-one WordPress cleanup tool for plugin leftovers, database cleanup, media duplicates, large files, transients, broken attachments and broke &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/320807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=320807"}],"author":[{"embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sjfsolutions"}],"wp:attachment":[{"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=320807"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=320807"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=320807"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=320807"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=320807"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=320807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}