Outdated WordPress core, plugins, and PHP are the leading cause of WordPress site compromises. Known vulnerabilities for popular plugins are publicly catalogued in databases like WPScan and Patchstack — and attackers run automated scans looking for sites still running vulnerable versions. Keeping your site updated is the single highest-leverage security action available, and it costs less time than recovering from a hack.
This guide covers exactly what to update, the correct order to do it, how to configure automatic updates safely, and the workflow that prevents updates from breaking a production site.
The Four Layers That Need Updating
WordPress updates aren’t a single action — there are four separate layers, each with its own update mechanism and risk profile:
- WordPress Core — the application itself. Minor/security releases (e.g. 6.7.1 → 6.7.2) fix specific security issues and bugs. Major releases (e.g. 6.7 → 6.8) introduce new features and sometimes break plugin compatibility.
- Plugins — each plugin is independently maintained. A single plugin with 1 million installs and an unpatched SQL injection vulnerability is a mass exploitation target. Plugins update most frequently and account for the majority of WordPress CVEs.
- Themes — active and inactive themes both need updating. Inactive themes are an overlooked vector: vulnerabilities in inactive themes can still be exploited if the files are present on disk.
- PHP — your server’s PHP version is separate from WordPress and requires host-level action. PHP 8.0 reached end-of-life in November 2023; PHP 8.1 reached EOL in December 2024. If you’re on PHP 8.1 or below, you’re running without upstream security patches. WordPress 6.x recommends PHP 8.2 or 8.3.
The Right Update Order
Update sequence matters. Running updates in the wrong order creates compatibility gaps:
- PHP (host level first, if an upgrade is overdue) — PHP version changes affect every plugin and theme simultaneously. Do this on staging first; PHP 8.x introduced strict typing enforcement that can expose deprecated function calls in older plugins.
- WordPress Core — update before plugins, not after. Plugin updates sometimes depend on Core APIs that only exist in a newer Core version.
- Plugins — update after Core is confirmed stable. Update one at a time on a busy site, or in bulk on staging.
- Themes — last, since theme updates have the lowest frequency and the least security urgency in most cases.
Never update plugins before Core. A plugin update written for WordPress 6.8 running on WordPress 6.6 can fail silently or corrupt data if it calls APIs that don’t exist in the older Core version.
Security: Why This Is Non-Negotiable
When WordPress or a popular plugin releases a security patch, the changelog details the vulnerability. Attackers read those changelogs. Sites still running the vulnerable version after a patch is published are the target — not sites running the latest version. The window between a patch release and active exploitation in the wild is often measured in hours, not days.
Common vulnerabilities fixed by routine updates include: SQL injection in plugin database queries, cross-site scripting (XSS) via unsanitised inputs, authentication bypass through misconfigured REST API endpoints, and file inclusion vulnerabilities that allow arbitrary code execution. These aren’t theoretical risks — they’re the actual methods used in the majority of WordPress compromises. For a complete security hardening checklist beyond updates, see WordPress security best practices and the top WordPress security plugins for automated vulnerability scanning.
Configuring Automatic Updates
WordPress handles automatic updates through a constant in wp-config.php and per-plugin toggles added in WordPress 5.5.
WordPress Core Auto-Updates
The WP_AUTO_UPDATE_CORE constant controls Core auto-update behaviour:
// Minor and security updates only (default since WP 5.6 — recommended):
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
// All updates including major releases (aggressive, not recommended for most):
define( 'WP_AUTO_UPDATE_CORE', true );
// No automatic Core updates (not recommended — you take on the monitoring burden):
define( 'WP_AUTO_UPDATE_CORE', false );
The default since WordPress 5.6 is 'minor' — automatic updates for security and maintenance releases, manual update required for major versions. This is the right default for most sites. Enabling true (all updates including major) risks a major release breaking plugin compatibility before plugin authors have pushed their compatibility updates.
Plugin and Theme Auto-Updates
Since WordPress 5.5, you can enable auto-updates per plugin from the Plugins admin screen (the “Enable auto-updates” toggle per row) or via wp-config.php. For most production sites, the recommended approach is:
- Enable auto-updates for security-critical plugins: Wordfence, Rank Math, WooCommerce core
- Review other plugin updates manually — especially page builders and plugins with large codebases where a breaking change is more likely
- Never auto-update a plugin the day of release for a high-traffic WooCommerce store; wait 48–72 hours for early adopters to surface breaking changes
You can also add the following to wp-config.php to enable auto-updates for all plugins (check this is appropriate for your site before enabling):
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
The Safe Manual Update Workflow
For major Core releases or any update on a business-critical production site, the professional workflow is staging-first:
- Take a database and files backup — before touching anything. UpdraftPlus with offsite storage (Google Drive, Dropbox, S3) is the standard. Confirm the backup completed before proceeding. See the WordPress backup and recovery guide for backup strategy.
- Apply updates to staging first — push all pending updates to a staging environment that mirrors production: same PHP version, same server configuration, same plugins. For staging setup, see how to create a WordPress staging site.
- Test thoroughly on staging — check the homepage, key landing pages, checkout (if WooCommerce), contact forms, and any custom functionality. Don’t just check that the site loads; verify that forms submit, payments process, and custom post types display correctly.
- Apply to production — once staging is confirmed stable, apply the same updates to production. WordPress activates maintenance mode automatically during Core updates (
.maintenancefile in the root) so visitors see a brief “Briefly unavailable for scheduled maintenance” message rather than a broken page. - Verify post-update — clear any server-side or CDN caches after updating. If you’re using a caching plugin, purge the cache. Check Search Console for any new crawl errors 24 hours after the update.
For hands-on plugin update management, how to update WordPress plugins manually covers the step-by-step process including what to do when an update fails.
Updating PHP: The Overlooked Layer
PHP updates happen outside WordPress — at the server/host level — and have their own risk profile. A PHP version upgrade affects every plugin and theme simultaneously, and a single plugin using a function deprecated in PHP 8.x can produce fatal errors site-wide.
The safe PHP upgrade path:
- Check plugin compatibility: search the WordPress plugin repository for “Tested up to PHP 8.x” compatibility notes, or use the PHP Compatibility Checker plugin to scan your codebase before upgrading
- Change PHP version on staging (most managed hosts — Kinsta, WP Engine, Cloudways — allow this via the hosting dashboard)
- Test staging thoroughly
- Change PHP version on production
Most managed WordPress hosts support PHP version selection via their dashboard. For a complete guide to PHP upgrades on Ubuntu servers, see why and how to upgrade PHP on WordPress sites.
The Abandoned Plugin Problem
The update that never comes is as dangerous as skipping updates. An abandoned plugin — one with no updates for 12+ months — will eventually contain an unpatched vulnerability with no fix available from the author. No amount of update discipline protects you from a plugin that isn’t being maintained.
How to identify abandoned plugins:
- Check the “Last Updated” date on the plugin’s WordPress.org page — 12 months without an update is a yellow flag; 24+ months is a red flag
- Check the “Tested up to” field — if the plugin is more than 2 major WordPress versions behind, the author isn’t verifying compatibility
- Check active install trends: a plugin dropping from 200,000 to 50,000 installs over a year signals the community is moving away from it
- Check for open security issues in the plugin’s Support forum or in the WPScan vulnerability database
When you find an abandoned plugin: find an actively maintained alternative and migrate before the vulnerability is exploited, not after. For diagnosing conflicts caused by plugin updates, identifying and fixing WordPress plugin conflicts covers the systematic approach.
Using WP-CLI for Updates
If you have SSH access to your server, WP-CLI makes bulk updates scriptable and auditable:
# Check what's available to update:
wp core check-update
wp plugin list --update=available
wp theme list --update=available
# Update everything (run on staging first):
wp core update
wp plugin update --all
wp theme update --all
# Update a single plugin:
wp plugin update woocommerce
WP-CLI is particularly useful for managed multi-site environments where clicking through each site’s dashboard is impractical. It also produces clean, loggable output suitable for automation scripts or CI/CD pipelines.
Maintenance Plans: When to Delegate Updates
For business owners who don’t want to manage updates themselves, a WordPress care plan covers scheduled updates with a staging-first workflow, post-update testing, and emergency rollback. This is particularly worth considering for WooCommerce stores where a broken checkout directly means lost revenue, or for sites without an in-house developer who can respond if an update causes a regression.
The full scope of what ongoing maintenance covers — updates, backups, security monitoring, uptime checks, and performance — is covered in the complete WordPress maintenance guide. For a systematic technical audit covering your current update status, PHP version, and security posture, the WordPress technical audit checklist is a good starting point.
Summary: The Update Rules That Matter
- Update order: PHP → Core → plugins → themes
- Auto-updates: enable
'minor'for Core (the default); selectively enable per-plugin; test major releases on staging first - Major releases: always staging-first, backup before, cache-clear after
- Abandoned plugins: no patch = no fix; replace before exploitation
- PHP: stay on supported versions (8.2+ in 2026); upgrade at the host level with PHP compatibility checks first


