PHP 8.6 is scheduled to reach general availability on November 19, 2026, and I will not be installing it that week on any site I run. Not because the release is dangerous — it is a steady, boring release — but because on a WordPress site the PHP version is usually chosen by your host, not by you, and that is where the surprise comes from. Some hosts move every account onto the new branch within days of a release. Others leave you on an old branch until it stops getting security fixes. Either default can break a site nobody tested.
Here is the check I run, in the order I run it.
The short version
- PHP 8.6 is scheduled for general availability on November 19, 2026.
- WordPress 7.1 is tested and compatible through PHP 8.5. PHP 8.6 is not in the compatibility matrix yet.
- The deadline that matters more is December 31, 2026 — the day PHP 8.2 stops receiving security fixes.
- Confirm your real version in Tools → Site Health → Info → Server, not on your host’s feature page.
- Test on a copy of the site with every error switched on, then read
wp-content/debug.log. - Plugins break first. WordPress core almost never does.
What 8.6 changes, and what it does not
The new features are developer features: readonly property defaults, partial function application, a built-in clamp(), a Time\Duration class, better JSON error messages. None of that touches your front page. If you run a small site, you will never type any of it.
What can touch you is the third category: code that was always sloppy and is now officially deprecated. PHP 8.6 deprecates things like returning a value from a constructor, a return inside a finally block, the third argument of define(), and several old type-check helpers. It also changes behaviour in a few places that matter quietly — session cookies now default to HttpOnly and SameSite=Lax, and trim() now strips form-feed characters by default.
Deprecations do not break code on day one. They fill your error log and, on a badly behaved host, they print notices into your page output. The things that actually break are plugins that never got tested against a new branch.
Step 1: find out what you are really running
Three places, and they can disagree:
Site Health. In wp-admin, go to Tools → Site Health → Info and open the Server section. The PHP version there is the one your web server actually hands to WordPress. This is the number that counts.
Your host panel. cPanel, Plesk and most managed dashboards have a “Select PHP version” control. Look at it, but do not trust it alone — a panel can list 8.4 while a different PHP handler serves your domain.
SSH, if you have it. Run php -v. Be aware this shows the CLI binary, which is often a different version from the one FPM serves. Use it as a cross-check, not as gospel.
Write the number down, along with today’s date. You want to be able to say “I checked on 11 November and it was 8.2” if something changes under you later.
Step 2: ask your host one question
One support ticket resolves most of this: do you upgrade PHP versions automatically, and when? There are three possible answers and they lead to different plans.
“We upgrade at release.” You have eight days. Test now, because the switch is coming whether you prepared or not.
“We upgrade after testing, a few weeks later.” You have a buffer, not a guarantee. The same test still applies, just with a longer runway.
“You choose the version in the panel.” Nothing happens automatically. Your only real deadline is the PHP 8.2 end of security support.
Ask in writing and keep the reply. When a site breaks at 2am after a maintenance window, “the panel said 8.4” is not an answer your host will accept — a ticket with their policy in it is.
Step 3: know which deprecations touch your site
This table is the short list worth grepping for. Everything here still works in 8.6; the point is to know whether it is your code or a plugin’s.
| Deprecated in 8.6 | Where I have seen it | What to do |
|---|---|---|
return inside finally |
Custom snippets, older child themes | Move the return out of the block |
Third argument of define() |
Legacy plugins with case-insensitive constants | Drop the argument, or replace the plugin |
spl_object_hash() |
Old helper libraries bundled into themes | Use spl_object_id() |
mb_ereg* functions |
Plugins doing multibyte regex work | Watch for it; the library behind it is end-of-life |
| Session cookie defaults | Custom login and cart flows outside WordPress | Retest logins and checkouts on staging |
Notice what is not on the list: nothing WordPress core does. Core is tested against each new branch before the matrix is updated. The exposure is always the third-party code you installed in 2021 and forgot about.
Step 4: test on a copy, with errors switched on
Half an hour on a staging copy beats a week of guessing. Copy the site, point a subdomain at it, then do three things.
First, turn on logging so deprecations show up instead of hiding. In wp-config.php, set WP_DEBUG and WP_DEBUG_LOG to true and WP_DEBUG_DISPLAY to false — you want the notices in a file, not printed over your pages.
Second, switch the staging copy to the PHP version you are testing, then walk the site the way a visitor would: home page, one post, search, a form, the login page, and the checkout if you sell anything.
Third, read the log. This is the part people skip:
# what the staging site is running
php -v
wp core version
wp plugin list --status=active --fields=name,version
# calls that 8.6 deprecates, by file
grep -rn "spl_object_hash\|mb_ereg\|is_double\|is_integer" \
wp-content/plugins wp-content/themes
# anything the debug log recorded
grep -c "Deprecated" wp-content/debug.log
An empty debug log after a full walkthrough is the result you want. A long list of deprecations from one plugin is an argument for replacing that plugin, not for staying on PHP 8.2 forever.
Step 5: if you are on PHP 8.2, December 31 is your deadline
PHP 8.2 goes into security-only support and then stops on December 31, 2026. After that date, a vulnerability found in 8.2 will not be patched. That is a much more concrete risk than a new release arriving on a date you can plan around.
My recommendation is to skip 8.6 for now and target PHP 8.5. It is inside the WordPress compatibility matrix, its active support runs to the end of 2027, and security fixes run to the end of 2029. PHP 8.4 is also fine today, but its active support ends on the same day as 8.2’s security support, so moving to 8.5 gives you a longer runway for the same amount of work.
Move to 8.6 later, after WordPress 7.2 — the release currently scheduled for December 8, 2026 — has been out for a few weeks and your plugin list has caught up.
The order I follow
Today: note your version, open the host ticket, and take a fresh backup before you change anything. If you have not applied WordPress 7.1.4 yet, do that first — that update is closing an actively exploited hole, and the same discipline applies: back up, block the upgrade directory, then update.
This week: copy the site to staging, run it on the PHP version you are targeting, and read the log. If the site already feels slow on the current branch, measure it before you blame the new version — a PHP upgrade can fix a slow site, but it can also just move where the time goes.
Before December 31: leave PHP 8.2. Then check the log again 48 hours after any switch. If a plugin throws notices, replace it while you still have a working version to fall back to, not after the host forces the change on a Friday.
The whole job is one support ticket, one staging copy, and one look at a log file. That is a much better use of an afternoon than discovering on November 20 that your host moved you and your contact form stopped sending mail.









