Repository navigation
Releases: duppinstech/wp-builder-meta-cleanup
Release list
v2.3.5
Requirements
- Requires at least: 6.0
- Requires PHP: 7.4
- Tested up to: 6.7
Changes in 2.3.5
Added
- Plugins screen: Settings opens Tools → Builder Meta Cleanup. Sponsor and Support are on the plugin row. View details shows the banner, icon, and Description, Installation, FAQ, and Changelog from
readme.txt. The Changelog tab uses the GitHub release notes when the updater has them. - Banner and icon in
assets/wporg/.
Changed
- Updates come from GitHub Releases only, through the shared updater standard v1.1.0. Dashboard → Updates → Check again refreshes that check.
- The release workflow publishes
wp-builder-meta-cleanup.zipand writes the release notes from this changelog. - Cleanup behavior is unchanged.
Removed
- About & tools update-source setting (GitHub, WordPress.org, or both).
v2.3.4 — Maintenance release
Maintenance release. Cleanup behavior is unchanged.
Repository tooling (CI, agent notes, and the release zip exclude list) shipped with this tag. Detect, delete, and inactive-stack rules are the same as v2.3.3.
v2.3.3 — Impreza (UpSolution) + OceanWP theme targets
New theme targets: Impreza (UpSolution) and OceanWP
Adds two more theme targets so their orphaned wp_options rows and postmeta can be swept once each theme is inactive.
Added
Impreza (UpSolution)
- Detection: the
Impreza/imprezatemplate or stylesheet, with case-insensitive matching viastrtolower(). Theme presence checks bothwp_get_theme( 'Impreza' )->exists()and the lowercase variant for case-sensitive filesystems. - Postmeta prefixes:
us_%,_us_%. - Exact options:
usof_options_Impreza(the UpSolution Options Framework blob — frequently 25 KB+ autoloaded), plus both casings oftheme_mods_Imprezaandtheme_mods_impreza. wp_optionsLIKE patterns:usof_%(UpSolution Options Framework) andus_%(shared UpSolution data / caches).
OceanWP
- Detection: the
oceanwptemplate or stylesheet. - Postmeta prefixes:
ocean_%,_ocean_%. - Exact options:
theme_mods_oceanwp(the Customizer blob). wp_optionsLIKE patterns:ocean_%(OceanWP core options),oceanwp_%(OceanWP + Ocean Extra), andoewt_%(Ocean Extra widgets).
Safety
Both targets follow the same active-theme guard as Astra / Divi / Beaver / BeTheme — postmeta cleanup is blocked while the target theme is active, and option deletion (exact and LIKE) is only offered when is_target_active() returns false. The Summary tab will automatically pull these into the per-stack breakdown when they have detectable rows, and the bulk cleanup button respects the per-stack opt-out checkboxes added in v2.3.1.
Upgrade
Patch release. No data migration, no configuration changes. Users without these themes installed will simply see two more Not installed / Inactive rows on the Themes & frameworks tab.
Builder Meta Cleanup v2.3.2
New preset target: Unlimited Elements for Elementor
Adds the Unlimited Elements for Elementor plugin (free + premium) as a preset target so the cleanup workflow can sweep its leftover rows after the plugin has been deactivated.
Added
- Plugin paths matched:
unlimited-elements-for-elementor/unlimited_elements.phpandunlimited-elements-for-elementor-premium/unlimited_elements.php. - Exact
wp_optionsrow:addon_library_catalog— the autoloaded addon catalog cache. Frequently grows to 100KB+ on long-running sites because it is autoloaded on every WordPress request. wp_optionsLIKE patterns:addon_library_%— catchesaddon_library_catalog,addon_library_lasttime,addon_library_version, and any sibling caches the plugin writes.unlimited_elements_%— catches the plugin's settings rows.
Safety
The new target sits in includes/data-plugin-cruft-targets.php with ui_tab = 'plugin'. It follows the same active-stack guard as every other preset: detection runs through is_target_active() against the listed plugin_paths, so options and pattern deletes are only offered when the plugin is not active. The Summary tab and the bulk "Run full cleanup" button will also automatically skip this target while the plugin remains active.
Upgrade
Patch release. No data migration, no configuration changes. Users without Unlimited Elements installed will simply see one more Not installed / Inactive row on the Plugins tab.
Builder Meta Cleanup v2.3.1
Summary tab is now the default + per-stack opt-out checkboxes
Two UX refinements requested by users of the v2.3.0 Summary tab.
Changed
- Summary is now the default tab and the first entry in the navigation. Opening Tools → Builder Meta Cleanup now lands on the site-wide overview instead of Themes & frameworks. The remaining tab order is: Summary → Themes & frameworks → Page builders → Plugins → About & tools.
- Per-stack breakdown table now includes an Include checkbox column on the left, with one checkbox per detected inactive stack. Every checkbox is pre-checked on page load so the default behavior matches the previous "delete all" flow — uncheck any rows you want to exclude before clicking the cleanup button. A master Include / Select all checkbox in the column header toggles every row at once and reflects an indeterminate state when only some rows are checked.
- The bulk submit button rewrites its own label live as you toggle checkboxes — for example "Delete 12,345 rows for 3 selected stack(s)" — and disables itself when zero stacks are selected. The backup-confirmation gate from v2.3.0 is preserved on top of this.
Added
Builder_Meta_Cleanup_Service::delete_all_for_inactive( ?array $only_target_ids = null )accepts an optional allowlist of target ids. Passingnull(the default) keeps the existing "delete every inactive target" behavior, so the WP-CLIclean-orphanscommand and any external callers are unchanged.- Return shape gains
targets_skipped_unselectedso the admin success message can distinguish "skipped because the stack is still active" from "skipped because you unchecked it".
Safety
- The admin POST handler validates posted target ids against the live registry and re-runs
is_target_active()per target before deleting anything. The per-stack checkboxes can only narrow the bulk action — they can never widen it, bypass the active-stack guard, or delete data for an unknown target id. - The backup-confirmation checkbox gate from v2.3.0 still applies on top of the new per-stack opt-out.
Upgrade
Patch release. No data migration, no configuration changes. The Summary tab will now load first when you click Tools → Builder Meta Cleanup — direct links to the other tabs (tools.php?page=builder-meta-cleanup&bmc_tab=theme|page_builder|plugin|about) still work unchanged.
Builder Meta Cleanup v2.3.0
Summary tab, master Select-all, and one-click full cleanup
Two new conveniences for cleaning up a site after migrating away from a theme/builder/plugin: a per-table master Select all checkbox so you can sweep everything on a tab in one click, and a brand-new Summary tab that lists every cleanable row across the entire site and lets you delete it all with a single submit (after confirming you have a backup).
Added
- Summary tab — fifth admin tab next to Themes & frameworks, Page builders, Plugins, About & tools. Shows:
- A prominent red disclaimer reminding you to back up the database and explaining what cleanup does / does not touch.
- Totals across inactive stacks: postmeta rows, exact-option rows (with combined byte size), pattern-matched option rows, grand total, and the count of active stacks that were skipped.
- Per-stack breakdown table grouped by stack with rows for postmeta / exact options / pattern options, the originating tab, and per-stack totals.
- Run full cleanup form: a backup-confirmation checkbox plus a single red "Delete N rows shown above" button. The button is disabled until the checkbox is ticked, and an additional
confirm()dialog fires on submit. Server-side, the POST handler re-checks the backup-confirmation field AND re-runsis_target_active()per target before deleting anything.
- Master Select all in the header of each cleanup table (Postmeta, Exact options, Pattern options) on the Themes & frameworks, Page builders, and Plugins tabs. Vanilla-JS handler:
- Binds via the HTML5
form="..."attribute, so it works with the existing detached form pattern. - Honors disabled rows (a "Stack active" or "Not present" row will never be force-selected).
- Reflects indeterminate state when only some children are checked.
- Binds via the HTML5
- WP-CLI parity:
wp builder-meta summary— read-only overview of every cleanable row across inactive stacks.wp builder-meta clean-orphans [--dry-run] [--yes]— the CLI equivalent of the Summary tab's "Delete all" button.
- Service helpers
Builder_Meta_Cleanup_Service::summary_for_inactive()anddelete_all_for_inactive()power both the admin Summary tab and the new CLI commands.
Safety
- The Summary "Run full cleanup" submit is double-gated: it stays disabled until you tick the "I have a current backup of this database and understand that this cannot be undone." checkbox AND confirm a native browser
confirm()dialog. The POST handler then re-checks that field. - The bulk delete still iterates target-by-target and calls
is_target_active()before doing anything. A stack that is still installed-and-active is never cleaned through the bulk path — even if it somehow appeared in a stale Summary view. - Master Select-all skips disabled child checkboxes, so a row marked "Stack active" or "Not present" cannot be force-checked from the UI.
Upgrade
Minor release. No data migration, no config changes. Existing Themes / Page builders / Plugins tabs behave identically except for the new "Select all" header checkboxes.
Builder Meta Cleanup v2.2.1
Astra cleanup: cover astra_docs_data and the full astra_% / astra-% option families
The Astra target's option allowlist only covered the dash variants (astra-settings, theme_mods_astra) and the postmeta prefixes ast- / _astra_, so the underscore-prefixed astra_docs_data (Astra's cached help/docs payload, often 100KB+ and autoloaded) was missed. v2.2.1 extends the Astra target so it can clean the full astra_… / astra-… family.
Added
- Astra: exact option
astra_docs_dataadded to the allowlist. - Astra:
options_likepatternsastra_%andastra-%covering Astra Sites / Starter Templates (astra_sites_*), Astra Pro / Astra Addons (astra_pro_*,astra-addon-auto-version, etc.), and addon flag rows.
Safety
Deletion of the new exact option and both options_like patterns is still gated through options_like_choice_allowed() → is_target_active('astra'). The rows will only be offered for deletion when the Astra theme is not the active template/stylesheet.
Admin
Themes & frameworks tab → Astra now shows the new exact-option checkbox plus two pattern-based rows (astra_%, astra-%).
WP-CLI
wp builder-meta options-delete --option=astra_docs_data --yes
wp builder-meta options-like-delete --target=astra --pattern=astra_underscore --yes
wp builder-meta options-like-delete --target=astra --pattern=astra_dash --yesUpgrade
Patch release. No configuration changes required. Sites still on Astra will see the new options listed but cannot delete them until the theme is switched, matching the rest of the plugin's behavior.
Builder Meta Cleanup v2.2.0
Full Changelog: v2.1.0...v2.2.0
v2.1.0
v2.0.0
Initial release: multi-builder detection, safe postmeta/options cleanup, WP-CLI (wp builder-meta).