Skip to content
ThemesCraft.

What to Do When a Plugin Update Breaks Your WordPress Website

A plugin update broke your WordPress website. Use recovery mode, force-deactivate over SFTP, read the fatal error, roll back safely, and stop it happening again.

Quick answer

If a plugin update broke your WordPress website, check your email first. Since WordPress 5.2, a fatal error during an update triggers an automatic recovery email to the admin address containing a one-click recovery mode link that logs you into a working dashboard with the offending plugin paused. If that email never arrived, rename the plugin folder over SFTP to force-deactivate it. Restore from backup only after you know which plugin failed, because a restore that keeps the same update queued just breaks the site again.

The standard advice for this situation was written before WordPress had any of the tools that now handle it. It tells you to log in and deactivate plugins one by one, and if you cannot log in, to connect over FTP and delete folders until the site comes back. That advice still works. It is also about four generations out of date, and it skips the single fastest route back to a working site.

WordPress 5.2 introduced fatal error protection. When a plugin throws a fatal error, WordPress detects it, pauses the plugin, and emails the administrator a recovery link. The site frequently stays up for visitors while the dashboard is broken. Nobody who last read about this problem in 2016 knows that, which is why people still start by deleting directories.

This is the full triage, ordered by how fast each route gets you back, including the diagnosis step most guides skip entirely, and the prevention that means you only read this once.

First: work out which failure you have

Broken is not one condition. These four present differently and have different fastest fixes, and applying the wrong one costs you an hour.

SymptomWhat it isFastest route back
Site and dashboard both blank whiteFatal error, display disabledRecovery mode email, then debug log
Front end fine, dashboard blank or erroringFatal error in an admin-only code pathRecovery mode email
There has been a critical error on this websiteFatal error protection already caught itRecovery mode email – it has been sent
Site loads but layout or a feature is wreckedNot fatal. CSS, JS or a data conflictRoll the plugin back to the previous version
Briefly unavailable for scheduled maintenanceUpdate died mid-flight, .maintenance file stuckDelete .maintenance from the WordPress root
500 Internal Server ErrorCould be PHP fatal, could be .htaccess or memoryCheck the server error log, not the WP log
The last row matters: a 500 is generated by the web server, so the detail lives in the server error log rather than wp-content/debug.log.

Route one: the recovery email (under two minutes)

Search the inbox of the address set under Settings, then General, for a message with the subject line Your Site is Experiencing a Technical Issue. It contains the name of the plugin and the file and line number that failed, plus a link that logs you into recovery mode.

In recovery mode the failing plugin is paused, the dashboard works normally, and you can deactivate or update it properly. That is the whole fix. The link expires after 24 hours by design.

Watch out

The recovery email arrives only if your site can send mail, which is exactly the thing that fails silently on most hosts using PHP mail(). If you have never confirmed that WordPress can send email, assume this route is unavailable. Check the spam folder, then move on. Setting up SMTP properly is a thirty-minute job that pays for itself the first time something breaks.

You can also force the admin email to something you control regardless of the database value:

// wp-config.php
define('RECOVERY_MODE_EMAIL', '[email protected]');

Route two: deactivate from the dashboard, if you still have one

If you can log in, this is straightforward, with one refinement on the standard advice. Do not deactivate plugins one at a time from the top of the list. Deactivate the one you just updated. You know which it was, because WordPress records it.

If auto-updates ran overnight and you genuinely do not know what changed, the bisect method is faster than sequential testing on a site with many plugins: deactivate half, test, and keep halving whichever half is still broken. Thirty plugins takes five tests rather than up to thirty.

Route three: force-deactivate over SFTP

Locked out entirely and no recovery email. This is the classic fix and it still works, but rename rather than delete. WordPress only loads plugins whose folders it can find, so renaming deactivates without destroying the plugin’s files or settings, and renaming it back restores everything.

  1. Connect over SFTP or open your host’s file manager and go to wp-content/plugins/.
  2. Rename the suspect folder, for example woocommerce to woocommerce-OFF. Load the site.
  3. If you do not know which plugin it was, rename the whole plugins folder to plugins-OFF. Every plugin deactivates at once and the site should come back.
  4. Rename it back to plugins. All plugins now show as deactivated in the dashboard, which you can reach again.
  5. Reactivate one at a time, loading the front end after each, until the site breaks. That is your culprit.

With SSH access, WP-CLI does the same thing in one line and is considerably less nerve-wracking:

wp plugin deactivate --all          # everything off
wp plugin activate akismet          # back on, one at a time
wp plugin list --update=available   # what is pending
wp plugin deactivate the-bad-plugin --skip-plugins   # bypass a fatal error

The --skip-plugins flag is the one worth remembering. It lets WP-CLI boot WordPress without loading any plugin code, so you can act even when a fatal error would otherwise stop the command from running at all.

Finding out what actually broke

This is the step the older guides omit, and it is the difference between fixing the site and understanding it. A fatal error names the file and line. That tells you whether the plugin is genuinely broken, or whether it is fine and your PHP version is the problem.

// wp-config.php - log without printing to visitors
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);

Reproduce the error, then read the end of wp-content/debug.log. Three patterns cover most of what you will find.

Log line containsCauseFix
Cannot redeclare functionTwo plugins defining the same function nameA genuine conflict. One of them has to go
Call to undefined function or methodPlugin expects a dependency or PHP version you do not haveCheck the plugin’s minimum PHP and WP requirements
syntax error, unexpected …Usually a corrupted or partial downloadDelete the folder and reinstall cleanly
Allowed memory size exhaustedNot a bug. The update needed more memoryRaise WP_MEMORY_LIMIT, then update again
Deprecated / Passing null to parameterOld plugin on PHP 8.xPlugin is unmaintained. Plan a replacement
Interpreting common fatal error signatures in wp-content/debug.log after a failed plugin update.

That fourth row matters more than it looks. A memory exhaustion error is not a broken plugin, and deleting the plugin does not fix anything. The update simply needed more headroom than the host allows, and the same failure is waiting for the next large plugin you install.

Rolling back to the version that worked

Deactivating removes the error but also removes the functionality, which is no good if the plugin runs your checkout. Rolling back to the previous version keeps the site working while you wait for a fix.

  • WP Rollback. Adds a Rollback link next to any plugin from the WordPress.org repository and lets you pick any previously released version from the dashboard. Free, and the least painful option.
  • Manual download from the repository. Every plugin’s WordPress.org page has an Advanced View at the bottom with a Previous Versions dropdown. Download the ZIP, delete the current folder, upload the old one.
  • Commercial plugins. Usually no public archive. Check your account area on the vendor site, which normally keeps previous builds, or open a support ticket and ask for the prior version specifically.

Watch out

A rollback is a holding position, not a resolution. Once the version is pinned, disable auto-updates for that plugin, or the next automatic run reinstalls the broken build overnight. Also check whether the update was a security release. Sitting on a known-vulnerable version indefinitely trades an outage for a breach.

When to restore from backup, and when not to

Restoring is the blunt instrument. It works, and it costs you everything that happened since the snapshot: orders, form submissions, comments, new posts. On a store, that is real money.

Restore when the site is down, revenue is being lost, and you cannot identify the culprit within about fifteen minutes. Do not restore as a first move, and do not restore files and database together when only the files are damaged. Plugin fatal errors live in the files; restoring the database as well throws away orders for no benefit.

The failure mode to avoid: restore a snapshot from before the update, watch the site come back, then watch auto-updates reinstall the same broken plugin that night. If you restore, disable auto-updates before you do anything else.

Stuck on Briefly unavailable for scheduled maintenance

This one looks catastrophic and is trivial. During any update WordPress writes a file called .maintenance to the root directory and deletes it when finished. If the update dies partway, the file is left behind and every request sees the maintenance notice.

Delete .maintenance from the WordPress root over SFTP. It is a dotfile, so enable hidden files in your client or you will not see it. The site returns immediately. Then check whether the update actually completed, because a half-installed plugin is its own problem.

Making sure it does not happen again

Everything above is recovery. This is the part that stops you needing it. None of it is exotic, and the first item alone removes most of the risk.

  1. Use a staging site. Most decent managed hosts include one-click staging. Update there, click through the pages that matter, then push. This single habit eliminates the majority of update outages and costs nothing on a host that already provides it.
  2. Be selective about auto-updates. Leave them on for small, well-maintained utility plugins. Turn them off for anything that touches checkout, payments, membership or your page builder. WordPress lets you set this per plugin from the Plugins screen.
  3. Verify your backups restore. An untested backup is a belief, not a backup. Restore one to a staging environment once a quarter. People discover their backups have been silently failing at precisely the wrong moment.
  4. Make sure email actually sends. Configure SMTP rather than relying on PHP mail(). This is what makes the recovery mode email available when you need it, and it fixes your order confirmations at the same time.
  5. Reduce the plugin count. Every active plugin is a chance for a bad release to take the site down. Twelve plugins that each do a job beats thirty where nine are dormant experiments.
  6. Check the changelog before major version bumps. A 3.x to 4.0 jump in a plugin you depend on deserves two minutes of reading. Breaking changes are usually announced.

Pro tip

Before you touch anything on a broken site, take a copy of the current state, broken and all. If your first fix makes things worse, you want the ability to get back to merely broken rather than newly destroyed. A file archive of wp-content plus a database dump takes two minutes.

The decision, in order

Check email for the recovery link. If it is there, you are done in two minutes. If not, and you can log in, deactivate the plugin you just updated. If you cannot log in, rename the plugins folder over SFTP. Once the site is back, turn on debug logging and read the actual error before deciding whether to roll back, replace the plugin, or fix a server setting. Restore from backup only if you are losing money and the clock has run out.

If the same plugin breaks repeatedly, the plugin is the problem rather than your process. Our list of essential WordPress plugins notes which categories have stable, well-maintained options worth switching to, and if the update left you unable to install anything at all, the causes are covered in our guide to plugins not installing on WordPress.

Frequently asked questions

How do I get into WordPress if a plugin update locked me out of the dashboard?

Check the admin email inbox for a message titled Your Site is Experiencing a Technical Issue. Since WordPress 5.2, a fatal error triggers an automatic recovery link that logs you in with the failing plugin paused. If no email arrived, connect over SFTP and rename wp-content/plugins to plugins-OFF, which deactivates everything and restores dashboard access immediately.

Is it better to rename or delete a plugin folder to deactivate it?

Rename it. WordPress only loads plugins whose folders it can find, so renaming deactivates the plugin while preserving its files and settings, and renaming it back restores everything exactly as it was. Deleting destroys the plugin files, and depending on the plugin it may also trigger uninstall routines that drop its database tables.

Should I restore a backup as soon as a plugin update breaks my site?

Usually not. A restore discards every order, comment and form submission since the snapshot was taken, and a plugin fatal error normally lives in the files rather than the database. Spend fifteen minutes identifying the plugin and deactivating it first. Restore only when the site is down, money is being lost, and you have run out of time.

How do I roll a plugin back to the previous version?

Install the free WP Rollback plugin, which adds a Rollback option next to any plugin from the WordPress.org repository and lets you pick any earlier release. Alternatively, open the plugin page on WordPress.org, scroll to Advanced View, and download a previous version from the dropdown. For commercial plugins, check your vendor account area or ask their support.

Why is my site stuck on Briefly unavailable for scheduled maintenance?

WordPress writes a file named .maintenance to the root directory during updates and removes it when finished. If the update died partway, the file was left behind. Delete .maintenance from the WordPress root over SFTP and the site returns instantly. It is a hidden dotfile, so enable hidden files in your FTP client to see it.

Should I turn WordPress plugin auto-updates off completely?

No, be selective. Leave auto-updates on for small, well-maintained utility plugins where a bad release is low risk and security patches matter. Turn them off for anything touching checkout, payments, memberships or your page builder, where a breaking change costs real money. WordPress lets you set this per plugin from the Plugins screen.

What does cannot redeclare function mean in my debug log?

Two plugins have defined a function with the same name, and PHP stops execution because it cannot decide which to use. It is a genuine conflict rather than a bug in either plugin alone, and there is no configuration fix. One of the two has to be replaced. The log line names the file and line of the second declaration, which tells you which pair is involved.

Why did I not receive the WordPress recovery mode email?

Almost always because your site cannot send mail. Many hosts block or silently drop PHP mail(), so WordPress generates the email and it never leaves the server. Check spam first, then configure a proper SMTP service. You can also force the destination by defining RECOVERY_MODE_EMAIL in wp-config.php rather than relying on the address stored in the database.

Leave a response

Your email address will not be published. Required fields are marked *