WP-Sweep · Version history
WP-Sweep changelog and version history
- Latest version
- 2.0.1
- Aug 24, 2026 (2 months ago)
- Releases
- 20
- since 2015
- In the last year
- 4
- about one every 30 days
- Tested up to
- WordPress 7.1.4
- PHP 8.2 or later
Releases each year
- 20152 releases
- 20162 releases
- 20174 releases
- 20181 release
- 20191 release
- 20202 releases
- 20233 releases
- 20251 release
- 20264 releases
20264 releases
WP-Sweep 2.0.1Latest
- NEW: A Sweep link on the plugin’s row of the Plugins screen, opening Tools -> Sweep.
- FIXED: The Sweep screen timed out on large databases. 2.0.0 computed every count before printing a byte — and asked for each table’s total row count once per row instead of once, so SELECT COUNT(*) ran against the postmeta table four times per load. The screen now renders at once and fetches the co…
- FIXED: Counting the duplicated meta sweeps fetched every duplicate row’s ids into PHP through GROUP_CONCAT, just to add them up. On a postmeta table with millions of duplicates that alone could exhaust the request. The count now reads per-key totals only; the ids are read where they are needed, by…
WP-Sweep 2.0.0
- FIXED: Unused Terms read “unused” off the count column, and core’s own counter counts published posts — so a term used only by drafts, pending posts, private posts or posts in the trash showed a count of zero and was deleted, taking its relationships with it. Those posts came back untagged with not…
- FIXED: Sweeping the terms of a taxonomy nothing registers any more finished with DELETE FROM wp_terms WHERE term_id NOT IN ( SELECT term_id FROM wp_term_taxonomy ), which is every stray row in the table rather than the ones the sweep had just orphaned. Rows the screen had neither counted nor listed…
- FIXED: Orphaned Term Relationships decided a row was an orphan by looking for its object_id in wp_posts — which only asks the right question when the taxonomy belongs to posts. For a taxonomy registered against users or comments, object_id is a user or comment ID, so every relationship whose ID hap…
- FIXED: The oEmbed sweep matched %_oembed_%, and in a LIKE pattern an underscore matches any single character — so it meant “any meta key containing oembed with a character either side”, and it was a contains match rather than a prefix one. Keys belonging to other plugins were hard-deleted along wit…
- FIXED: The oEmbed sweep was the one meta sweep that never consulted the protected-keys list, so a key a site had explicitly added to wp_sweep_postmeta_whitelist was deleted anyway — the list was even read for it and then ignored
- FIXED: Optimising the database ran SHOW TABLES with no prefix, which is every table in the schema. On a database shared between installs — an ordinary hosting arrangement — the details view listed every co-tenant’s tables, and the sweep issued OPTIMIZE TABLE against installs this administrator does…
- BREAKING: Requires WordPress 6.8 and PHP 8.2.
- BREAKING: The screen stays under Tools but its address changed, from tools.php?page=wp-sweep/admin.php to tools.php?page=wp-sweep. The old form put the installation directory name into the URL.
- BREAKING: The classes are renamed WPSweep -> WP_Sweep, WPSweep_Api -> WP_Sweep_API and WPSweep_Command -> WP_Sweep_Command. Every filter and action keeps its name.
- BREAKING: WP_Sweep::$limit_details is gone. Read it with limit_details() and change it with the wp_sweep_limit_details filter.
- BREAKING: The six wp_sweep_admin_*_sweep actions fire below the single sweep table, in the order they always had, rather than below six separate ones.
- BREAKING: Sweep All is gone. Tick the header checkbox and apply the Sweep bulk action instead, which does the same thing and lets you leave rows out.
- NEW: Bulk sweeping. Tick the sweeps you want and run them in one go instead of one click at a time.
- NEW: The sweeps are grouped on screen. The unfiltered view puts each under a heading with an icon — Post, Comment, User, Term, Option, Database — while staying one table, so a single bulk sweep still runs everything you tick. Sorting a column drops the headings rather than leaving them describing r…
- NEW: Group filters and sortable columns, from a real WP_List_Table.
- NEW: The whole screen works with JavaScript turned off. The row actions are ordinary nonced links and the bulk action is an ordinary form post.
- NEW: The meta key whitelists protect the duplicated meta sweeps as well as the orphaned ones, which the readme always claimed and the code never did.
- NEW: wp_sweep_capability and wp_sweep_limit_details filters. WP-Sweep has no settings screen: wp_sweep_limit_details is how the Details cap is changed.
- NEW: Every sweep carries a description of what it removes, shown under its name, and counts worth acting on are emphasised.
- NEW: An uninstall.php that cleans up across a whole network rather than the first hundred sites. WP-Sweep itself stores nothing: no option rows, no tables, no capabilities and no scheduled events.
- NEW: Restructured into includes/, following the Plugin Handbook.
- NEW: PHPUnit and vitest suites, and GitHub Actions CI across six WordPress and PHP combinations, single site and multisite.
- CHANGED: Meta key exclusions are matched in PHP rather than with SQL LIKE, so an underscore in a protected key is an underscore rather than a wildcard.
- CHANGED: Every database call goes through one method, and every query is prepared.
- FIXED: A stored XSS on the admin screen. The Details list was built by string concatenation and injected as HTML, so a comment author name containing markup ran as script in the administrator’s browser.
- FIXED: The plugin no longer builds paths from its own directory name, so the admin script loads when it is installed under a directory other than wp-sweep.
- FIXED: Filtering wp_sweep_excluded_termids to an empty array produced invalid SQL, leaving the Unused Terms count blank.
- FIXED: A term was excluded from the Unused Terms sweep whenever its ID matched a default_<taxonomy> option, even if that option pointed at a term that no longer exists. WordPress ships default_link_category set to 2, so on most sites whatever term held ID 2 quietly refused to sweep.
- FIXED: Sweeping without JavaScript deleted data and displayed nothing; the result is now shown.
- FIXED: The multisite uninstall loop stopped at 100 sites, hydrated whole site objects to read one column, and left the switch stack unwound by one.
WP-Sweep 1.2.0
WP-Sweep 1.1.9
20251 release
WP-Sweep 1.1.8
20233 releases
WP-Sweep 1.1.7
WP-Sweep 1.1.6
WP-Sweep 1.1.5
20202 releases
WP-Sweep 1.1.3
WP-Sweep 1.1.2
20191 release
WP-Sweep 1.1.1
20181 release
WP-Sweep 1.1.0
20174 releases
WP-Sweep 1.0.12
WP-Sweep 1.0.11
WP-Sweep 1.0.10
WP-Sweep 1.0.9
20162 releases
WP-Sweep 1.0.7
WP-Sweep 1.0.8
20152 releases
WP-Sweep 1.0.6
WP-Sweep 1.0.5
Questions about WP-Sweep’s releases
What is the latest version of WP-Sweep?
2.0.1, released on Aug 24, 2026 (2 months ago). It’s tested up to WordPress 7.1.4 and needs PHP 8.2 or later.
How often is WP-Sweep updated?
4 releases in the last year, about one every 30 days. Its first release on WordPress.org dates from November 2015.
Know when your rivals ship
Track your plugin and its rivals: TrackWP sees each new release in the nightly snapshot and alerts you, with what it did to their rank.
Start freeRelease dates come from the day each version’s folder was made in WP-Sweep’s WordPress.org SVN repository; the notes from its readme’s changelog, as its authors wrote it.