{"id":321053,"date":"2026-06-28T22:55:17","date_gmt":"2026-06-28T22:55:17","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/tso-options-tables-cleaner\/"},"modified":"2026-09-02T18:34:07","modified_gmt":"2026-09-02T18:34:07","slug":"tso-options-tables-cleaner","status":"publish","type":"plugin","link":"https:\/\/fy.wordpress.org\/plugins\/tso-options-tables-cleaner\/","author":9581708,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.4","stable_tag":"1.3.4","tested":"7.1","requires":"6.1","requires_php":"8.0","requires_plugins":null,"header_name":"TSO Options & Tables Cleaner","header_author":"Tu Soporte Online","header_description":"Cleans wp_options, orphan metadata, revisions, and leftover plugin tables. Backup and table optimizer. UI: CA \/ ES \/ EN.","assets_banners_color":"05122e","last_updated":"2026-09-02 18:34:07","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/ko-fi.com\/deadko_cat","header_plugin_uri":"","header_author_uri":"https:\/\/www.tusoporteonline.es\/blog","rating":0,"author_block_rating":0,"active_installs":10,"downloads":647,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.0":{"tag":"1.3.0","author":"deadko","date":"2026-08-26 22:02:12","revision":3667836},"1.3.1":{"tag":"1.3.1","author":"deadko","date":"2026-08-27 16:14:50","revision":3669213},"1.3.2":{"tag":"1.3.2","author":"deadko","date":"2026-08-29 20:40:53","revision":3671877},"1.3.3":{"tag":"1.3.3","author":"deadko","date":"2026-09-01 18:22:15","revision":3676631},"1.3.4":{"tag":"1.3.4","author":"deadko","date":"2026-09-02 18:34:07","revision":3678535}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3589307,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3589307,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x499.png":{"filename":"banner-1544x499.png","revision":3589307,"resolution":"1544x499","location":"assets","locale":"","width":1544,"height":499},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3589307,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.0","1.3.1","1.3.2","1.3.3","1.3.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3676667,"resolution":"1","location":"assets","locale":"","width":1067,"height":726},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3676667,"resolution":"2","location":"assets","locale":"","width":1066,"height":871},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3676667,"resolution":"3","location":"assets","locale":"","width":1070,"height":864},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3676667,"resolution":"4","location":"assets","locale":"","width":1065,"height":864},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3676667,"resolution":"5","location":"assets","locale":"","width":1062,"height":829}},"screenshots":[]},"plugin_section":[],"plugin_tags":[3786,153,732,187,13030],"plugin_category":[52,59],"plugin_contributors":[260487],"plugin_business_model":[],"class_list":["post-321053","plugin","type-plugin","status-publish","hentry","plugin_tags-cleanup","plugin_tags-database","plugin_tags-maintenance","plugin_tags-optimization","plugin_tags-wp-options","plugin_category-performance","plugin_category-utilities-and-tools","plugin_contributors-deadko","plugin_committers-deadko"],"banners":{"banner":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/banner-772x250.png?rev=3589307","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/icon-128x128.png?rev=3589307","icon_2x":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/icon-256x256.png?rev=3589307","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/screenshot-1.png?rev=3676667","caption":""},{"src":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/screenshot-2.png?rev=3676667","caption":""},{"src":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/screenshot-3.png?rev=3676667","caption":""},{"src":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/screenshot-4.png?rev=3676667","caption":""},{"src":"https:\/\/ps.w.org\/tso-options-tables-cleaner\/assets\/screenshot-5.png?rev=3676667","caption":""}],"raw_content":"<!--section=description-->\n<p>TSO Options &amp; Tables Cleaner is a database maintenance plugin for WordPress. It helps you clean wp_options, orphan metadata, revisions, and leftover plugin tables, with backups and table optimization.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Current status<\/strong> \u2014 Dashboard tab with database size, options\/transients summary, autoload highlights, and quick links to cleanup actions<\/li>\n<li><strong>General cleanup<\/strong> \u2014 Remove expired transients, post revisions, auto-drafts, trashed posts and comments, orphan post\/comment\/user\/term metadata<\/li>\n<li><strong>wp_options manager<\/strong> \u2014 Browse, search and delete orphan options grouped by plugin, with autoload management and plugin detection for 300+ known plugins<\/li>\n<li><strong>Extra tables<\/strong> \u2014 Detect and remove tables left by uninstalled plugins (see detection limitations below)<\/li>\n<li><strong>Plugin &amp; theme history<\/strong> \u2014 Track installation, activation, deactivation and deletion events for plugins and themes<\/li>\n<li><strong>Database backup<\/strong> \u2014 Export the full database to SQL, download, restore or delete backups stored in wp-content\/uploads\/tso-options-tables-cleaner\/backups\/<\/li>\n<li><strong>Table optimizer<\/strong> \u2014 Run OPTIMIZE TABLE on all fragmented WordPress tables<\/li>\n<li><strong>Interface languages<\/strong> \u2014 Catalan, Spanish and English UI with per-user language preference<\/li>\n<li><strong>Cache-plugin compatible<\/strong> \u2014 Compatible with LiteSpeed Cache and other caching plugins<\/li>\n<\/ul>\n\n<p><strong>Detection is heuristic, not perfect<\/strong><\/p>\n\n<p>WordPress does not record which database table belongs to which plugin. TSO Options &amp; Tables Cleaner infers ownership from table prefixes, plugin folders on disk, install history, and other signals. That works well for many sites, but it cannot be 100% accurate in every case.<\/p>\n\n<p>You may occasionally see:<\/p>\n\n<ul>\n<li>A table marked as <strong>probably orphaned<\/strong> while the plugin is still installed or active (false positive)<\/li>\n<li>A leftover table <strong>not flagged<\/strong> as orphaned after uninstall (false negative)<\/li>\n<li><strong>Recent activity<\/strong> on a table because MySQL metadata was updated (maintenance, repair, or unreliable timestamps on some engines) even though the plugin is gone<\/li>\n<li><strong>Unclear ownership<\/strong> for shared prefixes, renamed plugin folders, or custom tables<\/li>\n<\/ul>\n\n<p>The plugin is intentionally conservative: when confidence is low, delete actions are blocked and you will see <strong>Review only<\/strong>. Always check the plugin list, export SQL before dropping tables, and use manual assignment when the automatic label looks wrong. Never delete a table unless you are sure it is safe for your site.<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>TSO Options &amp; Tables Cleaner does not collect, transmit, or share any personal data with external services.<\/p>\n\n<p>Data stored locally:<\/p>\n\n<ul>\n<li>Language preference: The administrator's chosen UI language (Catalan, Spanish or English) is stored in wp_usermeta under the key tso_ui_lang. This data stays on your server and is never transmitted anywhere.<\/li>\n<li>Plugin\/theme history: A log of plugin and theme events is stored in wp_options under the key tso_plugin_history. This log is optional and can be cleared at any time from the History tab.<\/li>\n<li>Database backups: SQL backup files are stored locally in wp-content\/uploads\/tso-options-tables-cleaner\/backups\/ and are never uploaded to any external service. They are removed when you uninstall the plugin (download first if you need to keep them).<\/li>\n<\/ul>\n\n<p>No external connections: This plugin does not make any HTTP requests to external servers, does not use analytics, and does not track usage of any kind.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to \/wp-content\/plugins\/<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress<\/li>\n<li>Go to Tools &gt; TSO Options &amp; Tables Cleaner to start cleaning<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20it%20safe%20to%20delete%20options%20from%20inactive%20plugins%3F\"><h3>Is it safe to delete options from inactive plugins?<\/h3><\/dt>\n<dd><p>Yes. Options from inactive plugins can be deleted safely. The plugin marks active plugin options with a warning so you can identify them.<\/p><\/dd>\n<dt id=\"is%20plugin%20and%20table%20detection%20always%20accurate%3F\"><h3>Is plugin and table detection always accurate?<\/h3><\/dt>\n<dd><p>No. Detection is heuristic. WordPress does not store a definitive link between each table or option and its plugin. TSO uses prefixes, folder names, history, and other clues. Results are usually helpful, but false positives and false negatives can happen \u2014 especially after plugin renames, shared prefixes, stale maps, or unusual custom setups.<\/p><\/dd>\n<dt id=\"why%20does%20a%20table%20show%20as%20orphaned%20when%20the%20plugin%20is%20still%20active%3F\"><h3>Why does a table show as orphaned when the plugin is still active?<\/h3><\/dt>\n<dd><p>Usually because automatic detection matched an outdated path, a label-only prefix map, or conflicting signals. Reload the Extra tables tab after plugin updates. If the label is wrong, use <strong>Assign<\/strong> to link the table to the correct plugin, or export SQL and review before deleting anything.<\/p><\/dd>\n<dt id=\"why%20is%20delete%20blocked%20for%20a%20table%20that%20looks%20orphaned%3F\"><h3>Why is delete blocked for a table that looks orphaned?<\/h3><\/dt>\n<dd><p>Delete is allowed only when status and usage signals both look safe. If MySQL reports recent writes, the plugin folder still exists but is inactive, or ownership is uncertain, the UI shows <strong>Review only<\/strong> to reduce the risk of dropping a table still in use. Export the SQL backup and verify manually when in doubt.<\/p><\/dd>\n<dt id=\"where%20are%20the%20backups%20stored%3F\"><h3>Where are the backups stored?<\/h3><\/dt>\n<dd><p>In wp-content\/uploads\/tso-options-tables-cleaner\/backups\/. This directory is protected by .htaccess and an index.php to prevent direct access. Files are stored locally and never transmitted to any external service.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20backups%20when%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to backups when I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Uninstall removes the plugin-owned uploads folder (including SQL backups and options-tab cache). Download any backups you want to keep before deleting the plugin from WordPress.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20litespeed%20cache%3F\"><h3>Does it work with LiteSpeed Cache?<\/h3><\/dt>\n<dd><p>Yes. The plugin sends the appropriate no-cache headers and LiteSpeed Cache API calls to avoid caching the admin interface.<\/p><\/dd>\n<dt id=\"what%20data%20does%20this%20plugin%20store%3F\"><h3>What data does this plugin store?<\/h3><\/dt>\n<dd><p>Only the administrator interface language preference (Catalan, Spanish or English), saved as user meta (tso_ui_lang). No data is sent to external servers.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>Recent releases only. Older notes are in changelog.txt in the plugin folder.<\/p>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Extra tables: fix delete UI when \u00abAllow table deletion\u00bb is enabled (instant unlock + sync on reload)<\/li>\n<li>Extra tables: correct detection for TSO plugin tables named pluginstso_* (legacy pluginspc_* aliases)<\/li>\n<li>Options tab: search matches plugin group names (e.g. \u00abreally\u00bb finds Really Simple Security); clear \u2715 on search field<\/li>\n<li>Status tab: recent plugin\/theme changes shown in a compact table with action badges<\/li>\n<li>Detection audit: path column stacks segments; table fits viewport without forced horizontal scroll<\/li>\n<li>Email report: inline CSS only (WordPress.org Plugin Check)<\/li>\n<li>Regression tests: auto-clean schedule includes cleanup helpers<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Admin: new <strong>Current status<\/strong> tab (default) with database overview and shortcuts to cleanup<\/li>\n<li>Admin: modal overlays (rename group, option viewer, assign) render in the footer so they no longer break page layout<\/li>\n<li>Admin: consolidated overlay CSS\/JS; single asset enqueue; shipped Catalan and Spanish <code>.mo<\/code> catalogs<\/li>\n<li>Admin: screen query args centralized in storage helpers; assign modal placeholder translated<\/li>\n<li>Code: backup, cleanup, optimize, and status handlers split into dedicated include files (smaller core)<\/li>\n<li>Cron tab: live filter by hook, type, and search text without clicking Filter<\/li>\n<li>UI: nav width aligned to 1100px; historial title alignment; backup warning panel compacted<\/li>\n<li>Detection audit table: fixed column layout (horizontal scroll, readable paths and sample options)<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>WordPress.org Plugin Check: admin UI uses enqueued JS\/CSS only (no inline onclick, onchange, or style attributes)<\/li>\n<li>Security: escaped admin tab and language URLs; AJAX refresh nonce requires verified nonce and manage_options<\/li>\n<li>Uninstall: removes the plugin uploads folder (backups and options-tab cache); FAQ updated<\/li>\n<li>Requires at least WordPress 6.1<\/li>\n<\/ul>","raw_excerpt":"Database cleanup for wp_options, orphan metadata, revisions, and unused tables. Includes backups. English, Spanish, and Catalan.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321053"}],"author":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/deadko"}],"wp:attachment":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321053"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321053"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321053"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321053"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321053"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}