WordPressPHP 8.4Updated for 2026

WordPress Broke After a PHP 8.4 Update

IN
Reviewed by the Instant Nerds Team|Last updated: June 2026
Quick summary

Hosts are moving sites to PHP 8.4 because PHP 8.1 reached end of life on December 31, 2025, and PHP 8.2 is in security-only support. The upgrade does not change your files, but it surfaces code in older plugins and themes that depended on behavior PHP 8.4 removed or changed. The result is the There has been a critical error on this website page, a white screen, or a dashboard that hangs. The fastest way back online is to revert the PHP version in your host control panel, then fix the offending plugin or theme so you can move to a supported version cleanly. This page walks the exact diagnosis, with the real error strings, the recovery steps, and the one mistake that turns a 20-minute fix into a day of guessing.

Key facts at a glance

WordPress and PHP 8.4 status in 2026

Last updated

Recommended PHP for WordPress
Per the WordPress core clarification of May 22, 2026, the minimum recommended PHP version is 8.3 and the minimum supported is 7.4. WordPress 6.8 and later fully support PHP 8.4. WordPress 6.9 and 7.0 fully support PHP 8.5.
Why hosts are forcing the upgrade
PHP 8.1 reached end of life on December 31, 2025. PHP 8.2 is in security-only support until December 31, 2026, with no more bug fixes. Hosts move the default version forward so sites keep getting security patches.
Hallmark symptom
The There has been a critical error on this website page or a white screen that appears right after the host changed the PHP version, with no edit on your side.
Most common cause
Older plugins and themes that have not been updated for PHP 8.4. The headline deprecation, implicitly nullable parameters, is tripped by roughly 880 of the top 2000 PHP packages. Real fatals come from genuinely removed behavior.
Fastest way back online
Revert the PHP version in your host panel. On cPanel hosts use MultiPHP Manager, on SiteGround use Site Tools PHP Manager. The site returns in a minute or two. Treat this as triage, then fix forward.
Distinctive mechanism
A deprecation notice is not fatal by itself. The trap is that when display_errors is on in production, those notices print bytes to the page before WordPress sends its headers. That corrupts admin-ajax.php and REST API JSON, so the block editor, the Customizer, and checkout hang or go blank even though the underlying code still runs. The true white-screen fatals come separately, from removed PHP behavior an old plugin still calls.

Source: the WordPress core PHP support clarification of May 2026, the WordPress PHP compatibility handbook, the php.net supported versions schedule, the PHP.Watch reference on the 8.4 nullable deprecation, and our hands-on repairs. Get a quote in 60 seconds →

Why PHP upgrades break WordPress in 2026

WordPress runs on PHP, the language the server uses to build every page. Each PHP version is supported for about four years, two with active bug fixes and two with security patches only, then it reaches end of life and stops receiving any updates. PHP 8.1 hit that wall on December 31, 2025. PHP 8.2 is in its security-only phase until December 31, 2026. Hosts cannot leave customers on an unpatched language runtime, so they move the default version forward, increasingly to PHP 8.4. Some hosts auto-update the version, others email a deadline and switch on a schedule. Either way, many site owners discover the change only when something breaks.

The upgrade itself does not touch your files. What it does is change the rules your code runs under. PHP 8.4 removed and changed enough behavior that plugins and themes which have not shipped an update in a year or more can hit a fatal error the moment they run. WordPress catches the fatal and shows the There has been a critical error on this website page instead of a blank screen, and it emails a recovery link to the site admin. The core software is not the problem. WordPress 6.8 and later are documented as fully compatible with PHP 8.4. The problem is almost always a specific third-party plugin or theme that has fallen behind.

Key 2026 PHP dates
  • December 31, 2025: PHP 8.1 reached end of life. No more security patches.
  • Through 2025 and 2026: Hosts move default PHP to 8.3 and 8.4. Sites on 8.1 get bumped, often automatically.
  • May 22, 2026: WordPress core clarifies support. Minimum recommended PHP is 8.3, WordPress 6.8 and later fully support 8.4.
  • December 31, 2026: PHP 8.2 reaches end of life. The next wave of forced upgrades to 8.4 and 8.5 begins.

Which symptom matches yours

Find the row that matches what you see. Each one points to a different root cause and a different fix path.

SymptomMost likely root cause
There has been a critical error on this website appears right after your host changed the PHP version, and you changed nothing yourselfA real fatal error. A plugin or theme calls a function or relies on behavior PHP 8.4 removed or changed. Revert the PHP version in your host panel to restore the site, then read debug.log to find the exact plugin path.
The front end loads, but the block editor, the Customizer, or checkout spins forever or shows a blank panel since the PHP bumpDeprecation notices are printing before WordPress sends headers, which corrupts admin-ajax.php and REST API JSON. The code still runs, but the response is now invalid JSON. Turn display_errors off in production and the AJAX features return.
debug.log fills with Deprecated: Implicitly marking parameter as nullable is deprecated linesThe headline PHP 8.4 deprecation. Around 880 of the top 2000 PHP packages trip it. Non-fatal on its own. Update the plugin or theme, or suppress E_DEPRECATED in production while you wait for a vendor patch.
Fatal error: Uncaught Error: Call to undefined function ... in wp-content/plugins/...The plugin relied on a function removed in newer PHP, or on an extension no longer loaded on the new build. The file path in the message names the exact plugin. Update it, replace it, or revert PHP while you decide.
wp-admin is broken but the front end is fine after the PHP upgradeA fatal in an admin-only code path, often a page builder, backup, or security plugin not yet 8.4 ready. Use the recovery mode link WordPress emailed to the admin address, or rename the plugin folder over SFTP to deactivate it.
Images stopped generating thumbnails, or media uploads fail, after the PHP changeThe new PHP build is missing the GD or Imagick image extension, or another extension a plugin needs. Ask the host to enable the extension on the new version, or revert PHP while you sort it out.
Site Health flags an outdated PHP version, or a plugin marked not tested with your PHP versionA warning, not a breakage. Test the plugin on staging at the target PHP version. If it is abandoned and breaks, replace it with a maintained alternative rather than holding the whole site on end-of-life PHP.

The four root causes

PHP 8.4 breakage in WordPress falls into four buckets. Knowing which one you are in determines whether the fix is a one-line setting, a plugin update, or a code change.

1. A real fatal from removed or changed PHP behavior

This is the one that takes the site down. An older plugin or theme calls a function that newer PHP removed, passes the wrong type to a function that used to be lenient, or relies on a default that changed. PHP raises an uncaught error, and WordPress shows the critical error page. The message in debug.log looks like PHP Fatal error: Uncaught Error: Call to undefined function ... in /wp-content/plugins/some-plugin/file.php on line 214. The file path is the most valuable part of the whole message, because it names the exact plugin or theme at fault. The fix is to update that plugin, replace it if it is abandoned, or revert PHP while you decide.

2. Deprecation notices that flood the log and break AJAX

The headline PHP 8.4 deprecation is the implicitly nullable parameter. Code written as function example(array $value = null) now emits Deprecated: Implicitly marking parameter $value as nullable is deprecated, the explicit nullable type must be used instead. Around 880 of the top 2000 PHP packages trip it, so on a real WordPress site the log fills in minutes. A deprecation is not fatal on its own. The damage comes when display_errors is on in production. Those notices print to the page before WordPress sends its headers, which corrupts admin-ajax.php and REST API responses. The block editor, the Customizer, and WooCommerce checkout then hang or show a blank panel, because they expected clean JSON and got JSON with a deprecation warning glued to the front. Turn display_errors off and those features come back.

3. A missing or changed PHP extension on the new build

A server can ship a new PHP version with a different set of enabled extensions than the old one. If the new build does not load the gd or imagick image library, WordPress cannot create thumbnail sizes, so media uploads fail or images stop resizing. The same applies to intl, zip, mbstring, and other extensions a plugin may require. The classic legacy version of this is the message Your PHP installation appears to be missing the MySQL extension which is required by WordPress, which means the database driver did not load. The fix is to enable the missing extension on the new PHP version, which most hosts expose in their PHP settings panel.

4. An admin-only fatal in a page builder or heavy plugin

Sometimes the public site stays up while wp-admin breaks. Page builders, backup tools, security plugins, and import or migration plugins run heavy code that only executes in the dashboard. A PHP incompatibility there breaks the admin while cached front-end pages keep serving. WordPress emails a recovery mode link to the admin address that loads a special dashboard with the failing plugin paused. If you cannot use that link, rename the suspect plugin folder over SFTP to deactivate it and regain access. This is also the most common pattern where owners think the whole site is fine because the homepage loads, while they cannot actually log in to fix anything.

DIY vs hand it off

PHP 8.4 fixes range from a one-line setting to refactoring abandoned plugin code. If the left column matches your situation you can likely resolve this yourself. If the right column matches, get help before you make it worse.

Realistic on your own

  • You can reach your host PHP version selector and revert to get back online
  • debug.log names a single plugin, and an update for it is available
  • The problem is AJAX or editor hangs, and turning off display_errors fixes it
  • You have a staging site and a recent backup to test the upgrade on
  • The broken plugin has a clear, maintained replacement you are comfortable switching to
  • Only deprecation notices appear, no actual fatal error

Hand it off, save the time

  • The fatal traces to a custom theme or a paid plugin with no available update
  • Your host has no rollback option and the old PHP version is already gone
  • The site is a store losing orders every hour the checkout is down
  • You cannot log in at all, and the recovery mode email is not arriving
  • Multiple plugins fail on the new version and you cannot tell which to fix first
  • The only fix is editing plugin or theme PHP code and you are not comfortable doing that on production

How to diagnose the fatal

The critical error page tells you nothing useful by design. Run these in order and the real cause surfaces fast.

1
Confirm which PHP version you are now on

In your host panel, look at the PHP version selector, MultiPHP Manager on cPanel or PHP Manager on SiteGround Site Tools. If you have WP-CLI, run wp --info to see the PHP CLI version, and check the web PHP version under Tools then Site Health then Info then Server in the dashboard. Confirm the version actually changed and note what it changed from, so you know what to revert to.

2
Turn on the debug log so the fatal gets recorded

Edit wp-config.php and set define("WP_DEBUG", true);, define("WP_DEBUG_LOG", true);, and define("WP_DEBUG_DISPLAY", false);. The last line keeps errors out of the visitor view while still writing them to wp-content/debug.log. Reload the broken page once to generate a fresh entry.

3
Read debug.log and find the file path

Open wp-content/debug.log and look for the most recent PHP Fatal error line. Ignore the Deprecated lines for now. The fatal line ends with a file path like /wp-content/plugins/PLUGIN-NAME/includes/file.php on line 214. That path is your culprit. A path under /themes/ means the theme, a path under /plugins/ names the plugin.

4
Confirm the culprit by isolating it

If you can reach wp-admin, deactivate the named plugin and reload. If you cannot, connect over SFTP or the host file manager, open wp-content/plugins, and rename the suspect folder, for example from plugin-name to plugin-name-off. Renaming the folder deactivates the plugin. If the site returns, you have confirmed the cause.

5
Decide whether it is a fatal or just deprecation noise

If the only entries are Deprecated: lines and the site is technically up but AJAX or the editor misbehaves, you are in the display_errors scenario, not a true fatal. Confirm display_errors is off in production. If you see a PHP Fatal error line, the offending plugin or theme genuinely needs an update, a replacement, or a code fix.

6
Check for missing extensions if uploads or images broke

In Tools then Site Health then Info then Media and Server, confirm the image library is present. If GD and Imagick are both missing, the new PHP build did not load them. From WP-CLI, wp eval "var_dump(extension_loaded('gd'), extension_loaded('imagick'));" shows the same thing. Ask your host to enable the missing extension on the active PHP version.

How to fix it

Each fix branch below stands alone. Pick the one your diagnosis pointed to.

Triage first: revert the PHP version to get back online

Before debugging, get the site up. Switch the PHP version back to the last one that worked in your host panel. On cPanel hosts, open MultiPHP Manager, select the domain, choose the previous version, and apply. On SiteGround, open Site Tools then Devs then PHP Manager and set a specific older version instead of managed. The change takes a minute or two.

This is triage, not a cure. The old version stops receiving security patches, so use the breathing room to fix the real cause and then move forward to PHP 8.3 or 8.4 deliberately, on staging first.

If a plugin or theme throws a real fatal

Update the named plugin or theme first. Most active plugins shipped PHP 8.4 compatible releases through 2025 and 2026, so an available update often resolves it outright.

If no update exists and the plugin has not been touched in over a year, treat it as abandoned and replace it with a maintained alternative. Holding an entire site on an end-of-life PHP version for one stale plugin is the wrong trade. If the fatal is in a custom theme or a paid plugin you cannot replace, the offending code needs a direct fix, for example making a parameter explicitly nullable.

// Triggers the PHP 8.4 deprecation, and on stricter setups a type error
function example( array $value = null ) { /* ... */ }

// PHP 8.4 safe, explicit nullable type
function example( ?array $value = null ) { /* ... */ }

If deprecation notices are breaking AJAX or the editor

The site is technically running, but notices are leaking into responses. First, make sure production is not displaying errors. In wp-config.php:

define( 'WP_DEBUG', false );
@ini_set( 'display_errors', 0 );

To keep real warnings visible while silencing only the deprecation flood from outdated plugins, drop a must-use plugin in wp-content/mu-plugins/quiet-deprecations.php that removes only the deprecation level:

<?php
// Suppress only E_DEPRECATED, keep warnings and errors visible.
// Temporary measure while waiting on plugin and theme updates.
error_reporting( error_reporting() & ~E_DEPRECATED );

This quiets the noise without hiding genuine problems. It is a stopgap. The real resolution is updating the plugins and themes that emit the notices.

If uploads or thumbnails broke after the change

The new PHP build is missing an image extension. Ask your host to enable gd or imagick on the active PHP version. Most hosts expose extension toggles in the same panel as the version selector, or will flip it for you on request. Confirm the result in Tools then Site Health then Info then Media, which should list an available image editor. If a plugin needs a different extension such as intl or zip, enable that the same way.

The right way to move to PHP 8.4 for good

  1. Clone the site to staging, or spin up a staging copy from your host.
  2. Switch only staging to PHP 8.4 and exercise every important flow: login, checkout, forms, the editor, media uploads.
  3. Watch wp-content/debug.log for fatals, and resolve each by updating or replacing the plugin or theme named in the path.
  4. Once staging is clean, switch production to PHP 8.4 during a low-traffic window and watch the log for an hour.
  5. Keep PHP current from then on. Sitting on the version your host forces you off is what creates the emergency in the first place.

Not sure which branch applies, or do not want to edit plugin code on a live site?

Let us fix it in 2 hours →

A real PHP 8.4 debug session

A composite from the PHP 8.4 repairs we run most weeks, with identifying details removed.

Scenario

A small business on a cPanel host woke up to There has been a critical error on this website across the whole site. They had changed nothing. The host had moved the account from PHP 8.1, which reached end of life in December 2025, to PHP 8.4 on schedule. The recovery mode email had gone to an old admin address nobody checked, so the owner could not log in.

Diagnosis

We reverted the account to PHP 8.1 in MultiPHP Manager to restore the site, then enabled WP_DEBUG_LOG and switched a staging copy to PHP 8.4. The log showed one decisive line: PHP Fatal error: Uncaught Error: Call to undefined function ... in /wp-content/plugins/legacy-slider/init.php. A slider plugin with no update since 2023. Below it, hundreds of Deprecated: Implicitly marking parameter as nullable notices from two other plugins, which were noise, not the cause.

Resolution

The slider was abandoned, so we replaced it with a maintained block-based slider and rebuilt the two homepage sliders that used it. On staging at PHP 8.4 the fatal was gone. We confirmed checkout, forms, and media uploads, set display_errors off so the remaining deprecations could not leak into AJAX, then switched production to PHP 8.4 and watched the log for an hour. Clean. The site was now on a supported PHP version with no stale plugin holding it back.

Total elapsed
Online again in under ten minutes via the revert, fully migrated to PHP 8.4 inside the 2-hour window.

When to stop and hand it off

Four situations where DIY costs more than help. First, the fatal traces to a custom theme or a paid plugin with no update available, so the only fix is editing PHP code on a live site. Second, your host already removed the old PHP version, so there is no version to revert to and the site is down with no quick escape hatch. Third, the site is a store and every hour of broken checkout is lost revenue. Fourth, several plugins fail at once on the new version and you cannot tell which to fix first or in what order. We diagnose from the log, revert safely to get you online, fix or replace the offending code, and migrate you to a supported PHP version cleanly. Flat $49 to $149, done in two hours when scope fits, money back if we cannot.

Get a quote in 60 seconds

WordPress PHP 8.4 FAQ

My host changed my PHP version and now my WordPress site shows a critical error. Did the host break my site?

The PHP upgrade exposed a problem that was already there. Your site was running code, almost always in a plugin or theme, that depended on behavior PHP removed or changed in the newer version. While PHP 8.0 and 8.1 were current, that code limped along. On PHP 8.4 the same code throws a fatal error and WordPress shows the critical error page. The host did not edit your files, but the version change is what surfaced the fault. The fastest recovery is to switch the PHP version back to the last one that worked, in your host control panel, which restores the site in minutes. After that you fix the offending plugin or theme so you can move to PHP 8.4 cleanly. Hosts move the default PHP version forward because old versions stop receiving security patches. PHP 8.1 reached end of life on December 31, 2025, so staying on it is not a long-term option.

What PHP version should a WordPress site run in 2026?

As of the WordPress core team clarification published May 22, 2026, the minimum recommended PHP version is 8.3 and the minimum supported version is 7.4. WordPress 6.8 and later are documented as fully supporting PHP 8.4, and WordPress 6.9 and 7.0 are documented as fully supporting PHP 8.5. For most sites PHP 8.3 or 8.4 is the practical target. PHP 8.4 is mature enough that major plugin vendors have shipped compatible releases, and it is faster than 8.1 or 8.2. The reason to move off older versions is security. PHP 8.1 reached end of life on December 31, 2025, and PHP 8.2 is in security-only support until December 31, 2026, with no more bug fixes. Running an end-of-life PHP version means no security patches at the language level, which is a real risk for any site that handles logins or payments.

I see lots of Deprecated: Implicitly marking parameter as nullable is deprecated messages. Is that what broke my site?

Probably not on its own. That specific message is the headline deprecation in PHP 8.4. It fires when code declares a parameter with a null default but does not mark the type as nullable, for example function example(array $value = null) instead of function example(?array $value = null). It is a deprecation, not a fatal error, so by itself it does not take the site down. The reason it matters is volume and side effects. Around 880 of the top 2000 PHP packages trip this deprecation, so on a typical WordPress site the log fills fast. If display_errors is on in production, those notices print bytes to the page before WordPress sends its headers, which corrupts admin-ajax.php and REST API responses and can make the block editor, the Customizer, or checkout appear to hang or go blank. The fix is to turn display_errors off in production, then update the plugins and themes that emit the notices, or suppress E_DEPRECATED while you wait for vendor patches.

How do I roll back the PHP version to get my site online right now?

Every mainstream host exposes a PHP version selector. On cPanel hosts like Bluehost, open MultiPHP Manager under Software, select the domain, choose the previous PHP version that worked, and save. On SiteGround, open Site Tools then Devs then PHP Manager and switch from managed to a specific older version. On managed WordPress hosts like WP Engine or Kinsta, the PHP version is in the site or environment settings. The change takes effect within a minute or two. Reverting is triage, not a cure. The old version still gets you online so you can diagnose calmly, but because old PHP versions stop receiving security updates you should plan to fix the underlying plugin or theme and move forward to a supported version rather than sitting on the old one.

Only my wp-admin is broken after the PHP change. The front end loads fine. Why?

The fatal is in an admin-only code path. Page builders, backup plugins, security plugins, and import tools run heavy code in the dashboard that never executes on the front end, so a PHP incompatibility there breaks wp-admin while the public site keeps serving cached pages. WordPress emails a recovery mode link to the admin email address when a fatal happens, and that link lets you into a special dashboard with the failing plugin paused. If you did not get the email or cannot use it, connect over SFTP or your host file manager and rename the suspect plugin folder inside wp-content/plugins, which deactivates it and usually restores admin access. Then update or replace that plugin before re-enabling it.

My images stopped generating thumbnails or uploads fail after the PHP upgrade. Is that related?

Yes, this is a common side effect. A new PHP build on the server can ship with a different set of enabled extensions than the old one. If the GD or Imagick image library is missing or disabled in the new version, WordPress cannot create the resized image sizes it normally makes on upload, so thumbnails disappear or the upload throws an error. The same applies to other extensions a plugin depends on, such as the intl, zip, or mbstring extensions. The fix is to ask your host to enable the missing extension on the new PHP version, which most can do from the PHP settings panel, or to revert to the previous PHP version while you sort it out.

Can I just hide the errors instead of fixing them?

You can and should hide deprecation noise in production, but only deprecation noise, and only as a temporary measure. Setting WP_DEBUG to false and making sure display_errors is off stops the messages from reaching visitors and stops them from corrupting AJAX and REST responses. You can also suppress only deprecation-level reporting with a small must-use plugin that adjusts error_reporting to exclude E_DEPRECATED, which keeps real warnings and errors visible. What you must not do is hide a genuine fatal error. A fatal means code is actually failing to run, and suppressing it just turns a visible error into broken functionality, like a checkout that silently does not complete. Hiding deprecations buys time. Fixing or replacing the outdated plugin or theme is the actual resolution.

A plugin says it is not tested with my PHP version. Is it safe to keep using it?

Not tested is a yellow flag, not a guarantee of failure. Many plugins work fine on PHP versions newer than the one they were last tested against, because the author simply has not updated the tested-up-to header. The risk is real for plugins that have not had a release in over a year, because PHP 8.4 removed and changed enough behavior that abandoned code is likely to hit a fatal. The safe path is to test on staging. Switch a staging copy to the target PHP version, exercise the plugin, and watch debug.log. If it is clean, you are fine. If the plugin is abandoned and breaks, the right move is to replace it with a maintained alternative rather than hold your whole site on an end-of-life PHP version for one plugin.

Sources and further reading

Every version, date, and compatibility claim on this page traces back to the WordPress core team, php.net, the PHP.Watch reference, or the named host documentation.

Why we fix PHP upgrade breakage faster than a support ticket

2h

2-Hour Guarantee

Fixed in 2 hours or your money back. We revert first to get you online, then migrate you to a supported PHP version.

$49

Flat Rate $49 to $149

No hourly billing. We have fixed PHP 8.x breakage across every major host and page builder.

100%

Money-Back Guarantee

Cannot fix it? You do not pay. Zero risk to you.

Stop guessing at the PHP upgrade

We fix PHP version breakage every week. We get you online fast, then move you to a supported version cleanly. Flat $49 to $149, done in 2 hours when scope fits, money back if we cannot.

Fix My WordPress Site Now