Will my plugins work on PHP 8.4? How to find out before upgrading
Short answer
You find out by checking each plugin’s code for PHP 8.4 before you switch, because WordPress can’t tell you: plugins declare a minimum PHP version, never a maximum. Well-maintained plugins often have nothing to report; the ones to watch are old, custom or bundled-library code, and plugins that need an extension PHP 8.4 no longer includes, such as IMAP. In plugin code, PHP 8.4 has one change that stops a page (five removed MySQLi constants) and several that only add deprecation notices. A free check on your own server gives the answer per plugin, with file and line.
Why PHP 8.4 now
October 2026’s security release is a good moment to review your PHP version. PHP 8.4 gets security fixes until 31 December 2028 (php.net), and its October patch, 8.4.27, includes the PHP2Shell fixes (what that was). WordPress 6.7 and later support it.
Why WordPress can’t tell you
A plugin’s header and its wordpress.org page state the oldest PHP version it needs, never the newest it works with. So before an upgrade, WordPress has nothing to warn you about (more on that).
What can go wrong on PHP 8.4
| In a plugin | On PHP 8.4 |
|---|---|
| One of five removed MySQLi constants | Fatal error: the page stops |
| IMAP, OCI8, PDO_OCI or PSpell functions, without the extension installed | Fatal error, depending on your host |
Type $x = null, E_STRICT, trigger_error() with E_USER_ERROR, lcg_value() and more | Deprecation notice |
For the extensions, php.net: they “have been moved to PECL and are no longer part of the PHP distribution” (php.net). That’s a question for your host, not your code: IMAP and PHP 8.4.
Find out, plugin by plugin
- Install CompatNav, free on wordpress.org.
- Choose PHP 8.4 next to Check readiness for, and start the scan. It runs on your own server, in short background steps.
- Read each plugin’s entry: “Will break” or “Deprecation notice”, whether an update is available, and the file and line.
- Ask your host whether the extensions your plugins use are installed for 8.4.
A plugin that will break on 8.4, as the check reports it:
Then update, replace or report what will break (what to do), and switch. The 8.4 notices and their fixes: how to fix PHP 8.4 deprecation notices. The whole move as a checklist: preparing for PHP 8.4.
Key takeaways
- WordPress shows no warning before a PHP upgrade: plugins only declare a minimum PHP version.
- PHP 8.4 in plugin code: one change that stops a page, eight kinds of deprecation notices.
- IMAP, OCI8, PDO_OCI and PSpell left PHP in 8.4: a plugin needing one depends on your host.
- PHP 8.4 gets security fixes until 31 December 2028, two years longer than 8.2.
- Check every plugin for 8.4, then fix or replace what will break.
Frequently asked questions
Do plugin pages on wordpress.org say whether they support PHP 8.4?
They show the minimum PHP version (for example, PHP version 7.4 or higher), not the maximum. The changelog sometimes mentions PHP 8.4; the code is the only complete answer.
My plugins work on 8.3. Will they work on 8.4?
Often, but check: PHP 8.4’s removed MySQLi constants stop a page, and a plugin using IMAP stops if the extension isn’t installed.
What about deprecation notices?
They don’t stop pages. Log them instead of displaying them, and let plugin updates remove them over time.
Check your own site before you upgrade
CompatNav is a free WordPress plugin. It reads the code of your plugins and themes on your own server and tells you, in plain words, what will break and what will only show notices on the PHP version you choose. It never changes your code. It can’t see problems that only appear while code runs with real data, so a quick check of your site after the upgrade still matters.
Sources
- php.net: Backward incompatible changes in PHP 8.4.x
- php.net: Removed extensions in PHP 8.4
- php.net: Supported Versions
About the code examples: each output is the real output of the code shown, run with the official PHP builds, without a php.ini, with all errors reported and displayed. Only the file path was replaced by a neutral server path.