What Changed? for WordPress · How-to

How to find which plugin update broke your WordPress site

Your site worked yesterday. Today the checkout fails, or the layout is wrong, or you get the white screen. Something changed. The hard part is that WordPress does not give you a list of what.

This page shows how to find the change by hand, in order, with the steps that cost the least first. Then it shows a faster way for next time.

Step 1: Get into the dashboard, or skip it

If you can still open wp-admin, go on to step 2.

If you get "There has been a critical error on this website", check the inbox of the site's admin email address. WordPress usually sends a message with a recovery mode link and names the plugin or theme that caused the error. Open the link, log in, and you are in a safe mode where the broken item is paused.

If no email came, you can still stop a plugin from outside WordPress. Connect by FTP or your host's file manager, open wp-content/plugins/, and rename the folder of the plugin you suspect (add -off to the end). WordPress treats a plugin with a missing folder as inactive. Reload the site. If it comes back, you found it.

Step 2: Ask the question "what changed, and when?"

Work out when the site last worked. Even a rough guess helps: "Friday afternoon" or "after the 2am backup".

Now list what changed since then. WordPress gives you four partial sources:

  • Dashboard > Updates shows what is waiting for an update now. It does not show what was updated.
  • The Plugins screen shows each plugin's current version. It does not show the version before.
  • Email from WordPress. If automatic updates are on, WordPress emails the admin address after it updates a plugin, theme or core. Search your inbox for the site name and the day it broke.
  • Your host's panel. Many hosts keep a log of automatic updates, backups or file changes. Look for an activity or change log.

From these, write a short list on paper: the item, the old version if you know it, the new version, the day.

Step 3: Turn on the error log

If the site shows an error, the error often names the file. In wp-config.php, set:

php
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Reload the broken page, then open wp-content/debug.log. A line such as PHP Fatal error ... in /wp-content/plugins/some-plugin/... points at the plugin. Turn debugging off again when you are done. Do not leave it on a live site.

Step 4: Test one change at a time

If the list from step 2 has several items, turn them off one at a time. Start with the one closest to the time the site broke. Deactivate it from the Plugins screen, then check the broken page.

On a live store, do this on a staging copy if you have one. Deactivating a payment or shipping plugin on a live site can lose orders.

If your host offers WP-CLI, it is quicker:

bash
wp plugin list --fields=name,status,version
wp plugin deactivate some-plugin

Step 5: Check the rest

Not every break is a plugin update. Also look at:

  • A theme update or switch. Check Appearance > Themes and your child theme.
  • A WordPress core update. The version is at the bottom of the dashboard, and under Dashboard > Updates.
  • A change nobody made in WordPress. A developer who uploaded files over FTP, a deploy from git, or a host that changed the PHP version leaves no trace in wp-admin.
  • A user. Someone with admin access may have turned a plugin off. WordPress does not record who.

Step 6: Fix it

Once you know the item, you have three choices: roll back to the old version, wait for a fix and keep it off, or contact the plugin's developer with the version numbers. The version numbers matter. "It broke when 5.1 became 5.2" gets a faster answer than "it broke".

Rolling back changes code on a live site, so take a backup first.

Why this takes so long

Every step above exists because WordPress does not keep a readable history of changes. You rebuild one from emails, memory and guesses, usually while the site is down.

The faster way: keep the history before you need it

What Changed? records the history as it happens. It is a free plugin from Noble Strategies.

When the site breaks, you open Tools > What Changed and the "What changed?" tab. Pick the last 24 hours, 7 days or 30 days. You see a short list of:

  • every plugin, theme and WordPress core install, update, activation, deactivation, deletion and theme switch
  • the from and to version on each update
  • who did it: a named user, an automatic update, WP-CLI, or "changed outside WordPress"
  • failed updates, in red, with the error message
The What changed? tab for the last 7 days: counts at the top, then one row per change with the from and to version and who did it
The What changed? tab for the last 7 days: counts at the top, then one row per change with the from and to version and who did it

Steps 2 and 5 become one screen. The details:

Outside changes. Once a day the plugin compares the versions on disk with its history. If a plugin's version changed through FTP, git or your host, it adds a row marked "changed outside WordPress". That covers the cases WordPress itself never sees.

An amber Changed outside WordPress row: User Switching, 1.9.1 to 1.12.2
An amber Changed outside WordPress row: User Switching, 1.9.1 to 1.12.2

Failed updates. If an update does not finish, the row shows the error. In our test, an update that could not remove the old plugin folder was recorded with the message "Could not remove the old plugin."

A red Update failed row for Redirection, 5.8.1 to 5.10.1, with the host's error message
A red Update failed row for Redirection, 5.8.1 to 5.10.1, with the host's error message

Crash marker. When WordPress reports a fatal error from a plugin or theme, the history shows it next to that item's latest change. This is a hint, not a guarantee. A crash that happens before the plugin loads may not be reported. Pro has an opt-in switch that catches those too.

Deleted plugins keep their name. The plugin stores the name and version at the time of the change, so a plugin you deleted last month is still readable.

The History tab in the free version: search, type, event, source and user filters, a date range, and one row per change
The History tab in the free version: search, type, event, source and user filters, a date range, and one row per change

What it does not do

It does not roll anything back. It does not show changes from before you installed it; it takes a snapshot when you activate it and records from then on. It will not catch every crash.

Free and Pro

The free version keeps your full history, with no limits on rows or time. Pro is for telling other people: email, Slack and webhook alerts when something changes or fails, a monthly white-label client report, CSV export, notes on rows, and changelogs between versions from wordpress.org. Pro costs $49 a year for 1 site, $99 for 5 sites or $199 for 20 sites, with a 14-day refund and 10% off every renewal.

A habit worth keeping

Install the plugin while the site works. It records from the day you activate, so the next break has a history to read.

Learn moreGet it free on WordPress.orgGet Pro

Free version has no limits · GPL-2.0-or-later