Troubleshooting guide · website-errors · Published 2026-08-16 · 3 min read
Plugin activation boot loop
Fix a plugin activation boot loop where enabling an add-on sends WordPress into an instant 500, redirect, or fatal repeat loop.
- ·Symptoms
- ·Break the loop
- ·Why it loops
Symptoms
You activate a plugin, and the site stops responding or instantly redirects. On the next load it does the same, and on the next. WordPress never renders a normal response between attempts, because the fatal fires at an early stage on every request, usually in wp-settings.php where plugins load. Two flavours look different but share the same root:
- Fatal boot loop: immediately after activation, every page and the admin return a white screen or HTTP 500, often with a
require_onceorcall to undefined functionline in the log. - Redirect boot loop: the plugin forces a redirect on
init(a welcome wizard or forced login), the redirect bounces the browser back to the same page, andERR_TOO_MANY_REDIRECTSappears. The loop is the plugin's own visitor-redirect firing at the same URL every time.
Break the loop fast
The two hard facts that get you out: WordPress stores the active plugin list in one option (active_plugins), and any plugin scheduled to run first in that list dies every single request. So make the dead one not active. There are three equivalent routes.
1. Remove the plugin folder (safest, still live)
Renaming the plugin directory deactivates it, even when the admin is unreachable, and needs no console:
wp-content/plugins/my-plugin -> rename to my-plugin.disabled
WordPress treats a missing directory as inactive. The admin then loads, and you drop the fix. This is the first move when the site is down.
2. Edit the option from the database
Run an SQL update against a *backup* or via a drop-in that only deletes that one plugin row, never a full delete:
UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';
Prefill empty for safety: if you accidentally keep one entry with a bad key, WordPress dies on the same line again. Prefer the file route above for a live site.
3. Use an mu-plugin safety net
Create wp-content/mu-plugins/off-switch.php with nothing but the active_plugins filter that returns an empty list for one request. Then log into the admin and start over. The file is a one-shot safety switch, not a permanent fixture, and it deactivates every plugin in the same pass.
Why it loops (and what to check)
After you are back in, the root cause is the same for both flavours: the plugin's activation_hook runs a theme render, a redirect that ignores an admin URL, or a fatal from calling a function it expects WordPress to have defined already. The loop is your own plugin being re-activated at every request.
- Test the activation on staging, where a broken
wp_optionswrite is harmless. - Turn off
WP_DEBUG_DISPLAY, keepWP_DEBUG_LOGon, and watchwp-content/debug.logwhile re-enabling: the first log line names the hook that died. - If you control the code, write the hook defensively so activation never runs a fatality on a live site; if you do not, report the bug with the exact hook name and log line from the step above.
The plugin causes error guide is the wider isolation path, PHP fatal names the specific line to fix, and the login loop article is the adjacent redirect-loop surface where the wp-admin cookie bounces instead of the front-end.