What It Does
Site Doctor runs a set of health checks only when you click "Run scan" — never on a normal page load. It verifies that OPcache is enabled and healthy (hit rate, OOM restarts, key table), that an object-cache drop-in is actually engaged (a drop-in pointing at a dead Redis backend is flagged critical), that your homepage is served from a page cache (via a loopback HTTP probe), whether LiteSpeed Cache is active, and whether any enabled WooCommerce payment gateway is stuck in test/sandbox mode. Each finding gets a severity (ok/info/warn/critical) and a guided fix with the exact values to set. Everything runs locally on your server.
Features
- Five checks per scan: OPcache health, object-cache drop-in status, page cache (loopback probe), LiteSpeed Cache detection, and WooCommerce payment gateway test-mode detection
- Read-only by design — the scan never changes anything; every fix is guided remediation you apply yourself
- Never runs on page load — only on an explicit "Run scan" click or via WP-CLI (wp multitool doctor)
- OPcache analysis: distinguishes genuinely disabled OPcache from hosts that restrict the status API (Kinsta/WP Engine style opcache.restrict_api), checks hit rate, OOM restarts, and key table saturation
- Flags object-cache.php present but not engaged (dead Redis backend) as critical — the failure that page-load checks never surface
- Vendor detection for the object-cache drop-in (Redis Object Cache, Memcached) from its file signature
- Loopback cache probe reads real cache headers (x-litespeed-cache, cf-cache-status, x-cache, Age, x-varnish, x-kinsta-cache) and distinguishes HIT, MISS, and origin-rendered responses
- Probe falls back to localhost with a Host header for split-horizon DNS and Docker environments; reports "probe not possible" instead of guessing
- WooCommerce gateway check covers Stripe, PayPal, Przelewy24, PayU, Mollie, Square, Braintree, Authorize.net, and more — flags enabled gateways still in test/sandbox mode where real customers cannot pay
- Non-production host detection (.loc, .test, staging.* subdomains, localhost) automatically downgrades severities — a dev clone without a page cache is normal, not critical
- Guided fixes include exact php.ini values, computed for your server (e.g. suggested opcache.memory_consumption and max_accelerated_files)
- Scan result cached for 5 minutes in a transient — the loopback probe only runs during a scan
- Severity summary pills (critical/warning/info/ok) at the top of the results
How to Use
-
Open Site Doctor
Go to WP Multitool > Site Doctor. The page shows the last cached scan if one exists — it never triggers a scan just by loading.
-
Run a scan
Click "Run scan". The module runs all five checks, including a loopback HTTP probe of your homepage, and streams the results back. This takes a few seconds.
-
Review the findings
Each check renders as a card with a severity badge, an explanation of why it matters, and the raw data (hit rates, cache headers, gateway names). Focus on critical and warning items first.
-
Apply the guided fixes
Each non-ok finding includes a concrete fix — often exact php.ini directives or the specific WooCommerce settings screen to visit. Site Doctor never applies changes itself.
-
Re-scan to verify
After fixing, click "Run scan" again (the button always forces a fresh scan, bypassing the 5-minute cache) to confirm the finding turned green.
FAQ
Does Site Doctor change anything on my site?
No. It is entirely read-only. Every fix is "guided" — the module tells you exactly what to change and where, but never edits configuration, files, or the database itself.
Does the scan slow down my site?
No. The scan only runs when you explicitly click "Run scan" (or run wp multitool doctor via WP-CLI). The only network activity is the loopback probe of your own homepage — up to three requests when localhost fallbacks are needed — and the result is cached for 5 minutes.
Why does the page cache check say "loopback self-probe not possible"?
Some hosts block servers from making HTTP requests to themselves (loopback blocks or split-horizon DNS). Site Doctor tries a localhost fallback with a Host header, but if that also fails it reports "probe not possible" instead of guessing. Check the cache header from an external request instead.
What does the WooCommerce gateway check actually catch?
Enabled payment gateways that are still in test/sandbox mode. On a live shop that means real customers cannot pay. It checks the common flag styles (testmode, sandbox, mode/environment strings) across a dozen popular gateways, and catches setup wizards that save a localized label instead of the canonical "production" value.
Why are my severities lower on my staging site?
Site Doctor detects non-production hosts (localhost, .loc/.test/.local TLDs, staging./dev. subdomains) and downgrades critical to warning and warning to info. A dev clone without a page cache is normal, not an emergency. Severities are only ever downgraded, never upgraded.
Ready to optimize your WordPress site?
Join developers using WP Multitool to debug, optimize, and maintain WordPress.
Get WP Multitool