Scotty

Descripció

Scotty is the all-in-one solution for controlling, cleaning, and optimizing your WordPress site. With a modern React-based dashboard and a powerful feature suite, Scotty empowers you to analyze and maintain your database, manage cron jobs, fine-tune security, and control dozens of hidden WordPress settings — all from a single, intuitive interface.

For full documentation, visit the Scotty website.

Cleaning

  • Trash Management — Delete post revisions, auto-drafts, trashed posts, unapproved/spam/trashed comments, orphaned metadata, and transient options in bulk or one by one.
  • Duplicates Detection — Identify and remove duplicate entries across post meta, comment meta, user meta, and term meta tables.
  • Orphan Cleanup — Find and delete orphaned records in postmeta, commentmeta, usermeta, termmeta, and term relationships.

Optimization

  • Database — View all database tables with engine, auto-increment, collation, and overhead info. Optimize tables and reset auto-increment values individually or in bulk.
  • Disk Usage — Overview of WordPress installation size breakdown: core, themes, plugins, uploads, and database.

System

  • Cron Manager — View all scheduled cron jobs with next run time, schedule, interval, and arguments. Run, delete, search, sort, and bulk-manage cron jobs. Color-coded schedule badges and time-relative status indicators.
  • Shortcode Registry — Browse all registered shortcodes with their callback functions and callable status.

WordPress Settings

Control dozens of WordPress settings organized in 6 tabs:

General
* Enable/disable REST API and XML-RPC
* Hide WordPress version from source code
* Hide detailed login error messages
* Disable email authentication
* Disable the built-in file editor
* Disable author archives (prevents user enumeration)
* Disable Application Passwords

Admin
* Show/hide admin footer credit and version
* Show/hide the Welcome panel
* Toggle visibility of Dashboard, Posts, Media, Pages, Comments, and Tools menu items
* Disable update nags for non-admin users
* Disable the periodic admin email verification prompt

Writing
* Limit the number of post revisions
* Disable self-pings
* Configure auto-empty trash interval

Reading
* Set custom excerpt length
* Hide admin bar on frontend
* Disable emoji scripts and styles
* Disable embed scripts (wp-embed.js)
* Disable jQuery Migrate on frontend
* Disable RSS and Atom feeds

Performance
* Disable Heartbeat API on frontend
* Set custom Heartbeat interval
* Remove Dashicons CSS from frontend for non-admin users

Media
* Disable big image scaling (WordPress 5.3+)
* Set custom JPEG compression quality

Dashboard Widget

A compact dashboard widget on the WordPress Dashboard showing posts, comments, users, and options breakdown with progress bars, plus database size and cron count at a glance.

Coming Soon

  • Multisite support
  • Database rename, truncate, drop, export, import
  • Database search and replace
  • Database backup
  • Scheduled auto-cleaning
  • Spotlight search (CMD+K)
  • And more…

Captures

  • Overview Dashboard
  • Trash Management
  • Duplicates Detection
  • Database Optimization
  • Cron Manager
  • Shortcode Registry
  • WordPress General Settings
  • WordPress Admin Settings
  • WordPress Performance Settings
  • WordPress Media Settings

Instal·lació

  1. Upload the entire content of plugin archive to your /wp-content/plugins/ directory.
  2. Activate the plugin through the ‘Plugins’ menu in WordPress (deactivate and reactivate if you’re upgrading).
  3. Done. Enjoy.

PMF

1. What is Scotty?

Scotty is a WordPress maintenance and optimization plugin with a modern React-based dashboard. It helps you clean your database, manage cron jobs, control security settings, and optimize your site performance.

2. Do I have to back up before cleaning?

Yes, we strongly recommend backing up your database before performing any cleanup operation.

3. Can I undo a cleanup operation?

No, cleanup operations are permanent. Always back up first.

4. Will disabling the REST API break my site?

Disabling the REST API will prevent unauthenticated access. Logged-in users will still have access. Some plugins may require the REST API to function — test after disabling.

5. Where can I find the documentation?

Full documentation, guides, and release notes are available at scotty-plugin.vercel.app.

6. Can I request a new feature?

Yes! Please submit feature requests at the support forum.

7. Can I report a bug?

Yes! Please report bugs at the support forum.

Ressenyes

No hi ha ressenyes per a este complement.

Col·laboradors i desenvolupadors

«Scotty» és programari de codi obert. La següent gent ha col·laborat en este complement.

Col·laboradors

Traduïx «Scotty» a la teua llengua.

T’interessa el desenvolupament?

Revisa el codi , dona una ullada al repositori SVN o subscriu-te al registre de desenvolupament per RSS.

Registre de canvis

2.0.2

  • Feature: add Trash Summary card to Overview with total cleanable items, breakdown badges, and “Clean now” link
  • Feature: add Environment Info card to Overview showing PHP, WordPress, MySQL versions, memory limit, max upload size, and server
  • Feature: add Documentation link button in Features dropdown menu
  • Feature: redesign footer with Docs and Report Issue links, WP Bones and Mantine UI credits with icons
  • Feature: add Database Size and Cron Jobs count to dashboard widget
  • Enhancement: add loading skeleton and error state to dashboard widget
  • Enhancement: translate all dashboard widget tooltip strings for i18n support
  • Enhancement: reduce dashboard widget bundle size by removing unused providers and CSS imports
  • Enhancement: add link to documentation website in readme.txt description and FAQ
  • Enhancement: rewrite README.md with badges, links, features, tech stack, and project structure
  • Fix: modal confirm title invisible in dark mode
  • Fix: WPBonesLogo component using wrong Mantine v8 size props (width/height instead of w/h)
  • Fix: dashboard widget “Open Scotty” link pointing to #trash instead of overview
  • Chore: regenerate translation files (POT, PO, MO, JSON) with all new strings (223 total, Italian 100%)

2.0.1

  • Security: restrict admin menu capability from ‘read’ to ‘manage_options’ to prevent subscriber access
  • Security: add integer type casting to all AJAX delete endpoints for defense-in-depth
  • Security: wrap remaining raw SQL queries with $wpdb->prepare() in duplicate meta deletion methods
  • Fix: replace non-functional EMPTY_TRASH_DAYS constant with wp_scheduled_auto_delete_period filter
  • Fix: replace impossible is_null() check with empty() after sanitize_text_field() in CronTrait
  • Fix: correct resetAutoIncrement() to accumulate results across multiple tables
  • Fix: resolve potential undefined array key when more than 13 data categories exceed color palette
  • Fix: correct typo in OverviewAjaxServiceProvider ($commnets_count)
  • Performance: add ORDER BY and LIMIT 1000 to comment listing queries to prevent unbounded result sets
  • Enhancement: suppress deprecated WP_Debug_Data::get_sizes() notice in DiskTrait
  • Chore: align PHP version requirement to >=8.1 across composer.json, readme.txt, and scotty.php
  • Chore: update package.json version to match plugin version
  • Chore: update blueprint.json to use wordpress.org/plugins slug resource and target PHP 8.2
  • Chore: remove dead code (unused removeMenu method, empty PreferencesTrait, unreachable Ajax method)
  • Chore: standardize returnColumnsJson() visibility to private across all Ajax service providers

2.0.0

Major release with security hardening, modernized stack, UI improvements, and new features.

New Features

  • WordPress Settings: new Security options — disable file editor, author archives, Application Passwords
  • WordPress Settings: new Admin Menu options — toggle Media, Pages, Comments, Tools visibility
  • WordPress Settings: new Admin Notices options — disable update nags, admin email verification
  • WordPress Settings: new Writing options — disable self-pings, auto-empty trash with configurable days
  • WordPress Settings: new Reading options — disable emoji scripts, embed scripts, jQuery Migrate, RSS feeds
  • WordPress Settings: new Performance tab — Heartbeat control, Dashicons removal on frontend
  • WordPress Settings: new Media tab — disable big image scaling, custom JPEG quality
  • WordPress Settings: unified OptionsProvider with single fetch and shared Reset button
  • Cron: delete individual cron jobs with confirmation modal
  • Cron: bulk delete selected cron jobs
  • Cron: search/filter by hook name
  • Cron: sortable columns (hook name, next run, schedule)
  • Cron: row expansion showing signature, interval, and arguments
  • Cron: right-click context menu with Run and Delete actions
  • Cron: colored schedule badges (hourly, daily, weekly, one-time)
  • Cron: time-relative status indicators (overdue, soon, upcoming)
  • Overview: new Database Size quick card with link to Database section
  • Overview: new Scheduled Cron Jobs quick card with link to Cron section
  • Overview: clickable cards navigate to their corresponding section
  • Overview: refresh button to reload all overview data
  • Trash: bulk delete for unapproved, spam, and trashed comments
  • Trash: orphan term relationships listing, single and bulk delete
  • Duplicates: single and bulk delete for duplicate user meta and comment meta

Security

  • Fixed SQL injection in database optimize and auto-increment reset (table name whitelist)
  • Added schema validation and recursive sanitization for preferences update
  • Added esc_html() to all meta/option/comment values in JSON responses
  • Fixed hardcoded wp_posts table prefix in SQL subqueries
  • Added $wpdb->prepare() to all orphan detection queries
  • Sanitized cron hook_name and signature inputs
  • Fixed transient query missing prepared statement
  • Fixed XML-RPC error handler using PHP Error class instead of WP_Error
  • Standardized LIKE clause syntax across all queries
  • Fixed hardcoded commentmeta table prefix in orphan deletion

Bug Fixes

  • Fixed Disk overview showing NaN for timed-out directory calculations
  • Fixed Disk overview crash when WordPress size data contains error strings
  • Fixed division by zero in Options overview when option count is zero
  • Fixed OverviewCard pulsing indicator on arbitrary >50% values
  • Fixed admin bar removal running too early (before scripts are registered)
  • Fixed Reset to default not actually resetting options to defaults
  • Fixed each WordPress Settings tab creating a separate OptionsProvider (4 redundant fetches)
  • Fixed SWR mutate() not revalidating after bulk operations across all views
  • Fixed broken Refresh button in empty Trash/Duplicates view
  • Fixed Terms crash when excluded term IDs array is empty
  • Fixed translated strings interpolated in SQL (comments)
  • Fixed duplicate term meta deletion keeping wrong entry
  • Fixed Features popover Overview link not working
  • Fixed “Database Sneak Peak” typo (now “Sneak Peek”)
  • Fixed getOptions crash on undefined path segments when new options are not yet in database

Improvements

  • Migrated from npm to Yarn
  • Updated @wordpress/scripts from 27.9.0 to 31.7.0
  • Updated Mantine from 7.14.0 to 8.3.18
  • Updated all dependencies to latest compatible versions
  • Migrated to React 18 createRoot API (replaced deprecated wp.element.render)
  • Modernized tsconfig.json (es2020, react-jsx, bundler resolution)
  • Removed all unnecessary import * as React statements (30 files)
  • Removed deprecated MantineProvider withStaticClasses prop
  • Fixed Mantine 8 Image component rendering in header logo
  • Performance: replaced N+1 user queries with single count_users() call
  • Performance: removed repeated COUNT(*) subqueries in post/comment stats
  • Performance: added LIMIT 1000 to orphan detection queries
  • Removed esc_sql() mixing with prepare() in term relationships
  • Cleaned up dead code and unused imports across Cron, Shortcode, and Options components
  • Added error handling to Options/Preferences provider
  • Improved AJAX error throwing with structured status/statusText

1.1.0

  • Refactored code in TypeScript
  • Added internationalization support
  • Added total item count in Cron and Shortcode views
  • Added links in the left sidebar
  • Disabled admin notices for the Scotty view
  • Fixed unused terms view to enable deletion of unused terms

1.0.0

  • First public release