WordPress admin is slow? Here's how to fix it
9 min read · 05-May-2025
villagehosting.in team
5 May 2025
A slow WordPress frontend is a problem. A slow WordPress admin is a daily frustration. The admin does not benefit from page caching, so performance issues hit harder there. Here is how to diagnose and fix them.
Page caching doesn't help the WordPress admin
Full-page caching plugins (WP Rocket, LiteSpeed Cache, W3 Total Cache) cache the public-facing frontend pages. The WordPress admin (/wp-admin/) bypasses page cache entirely — every admin page hits PHP and the database fresh. Redis object caching, PHP OPcache, and removing slow plugins are the only effective admin-side performance fixes.
Why admin is slower than the frontend
Page caching (LiteSpeed Cache, WP Rocket, W3 Total Cache) serves cached HTML to anonymous visitors, bypassing PHP and the database. But it does not cache the admin area — every admin page request runs full PHP execution and database queries.
This means slow database queries, heavy plugins, and unoptimised PHP all hit the admin directly.
Step 1: Diagnose with Query Monitor
Install the Query Monitor plugin (free). It adds a debug bar to every admin page showing:
- Number of database queries per page
- Time per query
- Which plugin generated each query
- PHP errors and warnings
- Hook timing
A typical, clean WordPress admin page runs 30–80 queries. If you are seeing 300+ queries, something is wrong.
Look for:
- Slow individual queries (> 0.1 seconds each)
- Queries from specific plugins that are unreasonably high
- N+1 query patterns (same query repeated hundreds of times)
Step 2: Identify slow plugins
Plugins can slow down the admin in two ways:
Loading JavaScript and CSS on every admin page — plugins should only enqueue their assets on relevant pages. Badly written plugins load on every admin screen.
Running hooks on every admin request — some plugins hook into admin_init or admin_footer and run database queries regardless of what admin page you are on.
To identify the culprit:
- Go to a slow admin page
- Deactivate all plugins
- Reactivate one by one until slowness returns
- Alternatively, check Query Monitor → "Components by time" — shows which plugin's code is slowest
Step 3: Tame the WordPress Heartbeat API
WordPress fires an AJAX request to admin-ajax.php every 15 seconds while you are in the admin. This is the Heartbeat API — used for auto-save, post locking, and plugin update notifications.
On shared hosting, hundreds of simultaneous admin users all pinging admin-ajax.php creates significant server load.
Reduce the heartbeat interval:
Install Heartbeat Control by WP Rocket (free) or configure manually in your theme's functions.php:
add_filter('heartbeat_settings', function($settings) {
$settings['interval'] = 60; // seconds (default is 15)
return $settings;
});
Disable heartbeat in admin (if you do not need autosave):
add_action('admin_enqueue_scripts', function() {
wp_deregister_script('heartbeat');
});
Do not disable heartbeat on the post editor screen if you need auto-save.
Step 4: Admin-ajax.php overload
admin-ajax.php is WordPress's generic AJAX handler. Many plugins use it for front-end AJAX too (product filters, cart updates, form submissions). If your server logs show thousands of requests to admin-ajax.php, it is likely from front-end plugin activity, not admin users.
Check your access logs:
grep "admin-ajax.php" ~/access-logs/yourdomain.com | wc -l # count requests today
Identify the action parameter in the requests — that tells you which plugin is generating them. Common offenders: contact form plugins with spam bot traffic, WooCommerce cart operations, lazy loading plugins.
Solutions:
- Migrate AJAX-heavy plugins to their own endpoints (developer task)
- For WooCommerce: use LiteSpeed Cache's ESI (Edge Side Includes) to cache parts of dynamic pages
- Block bot traffic to
admin-ajax.phpusing Cloudflare WAF rules
Step 5: Enable Redis object caching
Redis caches database query results across PHP requests. For the admin area, this means:
- Menu items cached after first load
- User meta lookups cached
- Options cached (WordPress makes dozens of
wp_optionslookups per page)
See our guide on Redis object caching setup for the configuration steps. The admin area benefits more from Redis than the frontend (which has page caching).
Step 6: Check your database tables
Bloated wp_options table slows down every WordPress page, including admin:
In phpMyAdmin, run:
SELECT option_name, LENGTH(option_value) as size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size DESC
LIMIT 20;
WordPress loads all autoload = 'yes' options on every request. If plugins are storing large data objects here (serialised arrays with thousands of items), it creates a large payload on every page.
Fix: Use the WP-Optimize plugin to clean up autoloaded options and orphaned data.
Also optimise your database tables periodically:
OPTIMIZE TABLE wp_options, wp_posts, wp_postmeta, wp_comments;
Step 7: PHP version and OPcache
Admin pages run PHP. An outdated PHP version or missing OPcache slows everything down.
Check PHP version: cPanel → MultiPHP Manager — ensure you are on PHP 8.1 or 8.2 (not 7.x).
Enable OPcache: cPanel → MultiPHP INI Editor → enable opcache.enable = 1
OPcache caches compiled PHP bytecode in memory, significantly reducing PHP execution time.
PHP memory limit: The admin needs more memory than the frontend. Set memory_limit = 256M in your PHP configuration (cPanel → MultiPHP INI Editor).
Step 8: WooCommerce admin specifically
WooCommerce admin is the most common source of complaints. The Products, Orders, and Analytics pages are inherently database-heavy.
WooCommerce HPOS (High-Performance Order Storage): WooCommerce 7.1+ includes HPOS, which moves order data from custom post types (slow) to dedicated tables (fast). Enable it: WooCommerce → Settings → Advanced → High-performance order storage → Enable.
Disable unnecessary WooCommerce admin features:
- WooCommerce → Settings → Advanced → WooCommerce.com Features → disable telemetry
- Remove unused WooCommerce widgets from the admin dashboard
WooCommerce Analytics: If the WooCommerce Analytics screen is slow, it is running complex aggregate queries. Make sure you have proper indexes on the wc_order_stats table:
-- Run in phpMyAdmin
SHOW INDEX FROM wp_wc_order_stats;
Measuring improvement
Use Query Monitor before and after each change:
- Number of queries: aim for < 100 on standard admin pages
- Total query time: aim for < 500ms
Use browser DevTools to measure admin page load time before/after changes.
With Redis + current PHP + OPcache + a plugin audit, most WordPress admin areas go from 5–10 second loads to 1–2 seconds.