A plugin conflict happens when two plugins (or a plugin and the theme, or a plugin and the current PHP version) don’t work together. Typical symptoms: a broken layout, a button that does nothing, the block editor failing to load, checkout errors, a white screen, or “There has been a critical error”. Finding the culprit is a methodical process, and on a VPS you can do it without affecting visitors.
Step 0: back up and, ideally, use staging
Testing by deactivating plugins on a live site can break things for visitors (forms, payments, caching). Clone the site to a staging copy first if possible. See WordPress staging site and WordPress backup without a plugin.
Step 1: collect clues
- When did it start? Right after updating a plugin, the theme, WordPress, or PHP? That’s your prime suspect.
- PHP errors: check the logs for fatal errors and warnings that name a plugin path:
sudo tail -n 50 /var/log/nginx/error.log
tail -n 50 /var/www/example.com/wp-content/debug.log
See WordPress debug mode.
- JavaScript errors: open the browser’s DevTools Console on the broken page. Errors like
Uncaught TypeError … plugin-name/js/…point to the plugin. jQuery errors often mean a plugin loads its own outdated jQuery.
Step 2: Health Check troubleshooting mode (no visitor impact)
The Health Check & Troubleshooting plugin (by the WordPress team) has a Troubleshooting Mode. It disables all plugins and switches to a default theme for your session only. Visitors still see the normal site. Enable plugins one at a time from the admin bar until the problem reappears.
Step 3: bisect with WP-CLI (fast, on staging)
cd /var/www/staging.example.com
wp plugin list --status=active --field=name > active-plugins.txt
wp plugin deactivate --all
# test: is the problem gone? If yes, a plugin is involved.
# re-activate half of them
head -n 10 active-plugins.txt | xargs wp plugin activate
# test again, then narrow down the half that brings the problem back
Halving the list each time finds the culprit among 30 plugins in about five rounds. Then check pairs: the conflict might only appear when plugin A and plugin B are both active.
Test the theme too:
wp theme activate twentytwentyfive
See WP-CLI guide.
Step 4: common conflict patterns
| Symptom | Typical cause |
|---|---|
| Layout broken after an update | Caching or optimization plugin combining or deferring CSS/JS. Clear caches, exclude the script |
| Block editor won’t load | A plugin’s JS error, or REST API blocked by a security plugin |
| Forms or checkout fail | JS “defer/delay” optimization, or security/firewall rules |
| Fatal error after a PHP upgrade | Old plugin not compatible with PHP 8.x. See WordPress PHP 8 compatibility |
| Two plugins doing the same job | Two SEO plugins, two cache plugins, or two security plugins: keep one |
| Redirect loops | Redirect plugin plus server redirects, or SSL plugin plus proxy. See too many redirects |
Step 5: fix it
- Update both plugins, the theme and WordPress. Many conflicts are already fixed upstream.
- Check the plugins’ support forums or changelogs for the issue.
- Configure around it: exclude a script from minification or delay, or disable an overlapping feature in one plugin.
- Replace an abandoned plugin (no updates for a year or more) with a maintained alternative.
- Report it to the plugin authors, with the steps to reproduce, PHP and WordPress versions, and the error messages.
- As a last resort, roll back the plugin version (WP Rollback plugin, or
wp plugin install plugin-slug --version=1.2.3 --force) until a fix is released.
Prevent future conflicts
- Keep the plugin count lean. Each plugin is code you have to trust and update.
- Avoid overlapping plugins (one cache, one SEO, one security plugin).
- Update on staging first, especially major versions. See update WordPress safely.
- Check that plugins are tested with your WordPress and PHP versions.
- Monitor errors after updates (PHP error log, uptime checks). See Uptime Kuma.
Quick reference
| Step | Tool |
|---|---|
| Find errors | PHP error log, debug.log, browser console |
| Test without visitor impact | Health Check Troubleshooting Mode |
| Bisect plugins | wp plugin deactivate --all, then activate in halves |
| Test theme | wp theme activate twentytwentyfive |
| Roll back | wp plugin install <slug> --version=X --force |
Related: WordPress critical error and WordPress hooks: actions and filters.