PHP 8.6 and WordPress plugins: which popular plugins log deprecation notices

PHP 8.6 comes out on 19 November 2026. We ran the 100 most popular WordPress.org plugins (55,760 PHP files, latest releases on 28 October 2026) on the PHP 8.6.0RC4 release candidate. 39 of them use something PHP 8.6 deprecates, and 12 log a notice on an ordinary front-end page load. Nothing stops working, but the notices fill logs and show on pages wherever errors are displayed. Below: every plugin, file and line, and the one-line fix for each.

Real PHP 8.6.0RC4 binaryWordPress 7.1.1 test siteOnly what is new in 8.6

What a PHP 8.6 deprecation notice does, and what it doesn't

The 39 plugins with PHP 8.6 findings

"On a normal page load" means our WordPress 7.1.1 test site logged a PHP 8.6 deprecation from that plugin when we opened the home page or a post, with only that plugin active and its default settings.

PluginInstallsVersion testedNotice in our test? What PHP 8.6 flags
Elementor Website Builder10,000,000+4.3.5Yes: logged on a normal page loadreturns a value from a constructor; class constant named NAMESPACE; calls spl_object_hash()
Yoast SEO10,000,000+28.8Not on the pages we openedcalls spl_object_hash(); bundled Guzzle Promises Is class
LiteSpeed Cache7,000,000+7.9.2Not on the pages we openedcalls spl_object_hash()
WooCommerce7,000,000+11.2.1In wp-admin / on activationcalls is_a() with a string; returns a value from a constructor; calls is_integer() / is_long(); calls spl_object_hash()
Site Kit by Google5,000,000+1.190.0Not on the pages we openedcalls is_integer() / is_long(); calls spl_object_hash(); bundled Guzzle Promises Is class
Wordfence Security5,000,000+9.0.2Yes: logged on a normal page loadclass constant named NAMESPACE; returns a value from a constructor
Rank Math SEO4,000,000+1.0.280Not on the pages we openedclass constant named NAMESPACE; calls spl_object_hash()
UpdraftPlus4,000,000+1.26.14Not on the pages we openedcalls is_integer() / is_long(); returns a value from a constructor; calls spl_object_hash(); bundled Guzzle Promises Is class
WP Mail SMTP by WPForms4,000,000+4.10.3Not on the pages we openedcalls spl_object_hash(); bundled Guzzle Promises Is class
Really Simple Security3,000,000+9.8.4Not on the pages we openedclass constant named NAMESPACE
All in One SEO2,000,000+5.0.4Yes: logged on a normal page loadreturns a value from a constructor; calls is_a() with a string
MonsterInsights2,000,000+11.3.0Yes: logged on a normal page loadreturns a value from a constructor
Complianz GDPR/CCPA Cookie Consent Banner1,000,000+7.5.6Not on the pages we openedcalls mbregex functions (mb_ereg_*); calls strcoll(); calls spl_object_hash()
Duplicator1,000,000+5.1.0Not on the pages we openedcalls spl_object_hash(); bundled Guzzle Promises Is class
ElementsKit Elementor Addons1,000,000+4.0.9Not on the pages we openedclass constant named NAMESPACE
EWWW Image Optimizer1,000,000+8.9.0Yes: logged on a normal page loadreturns a value from a constructor
Smash Balloon Social Photo Feed1,000,000+6.14.0Yes: logged on a normal page loadreturns a value from a constructor; calls spl_object_hash()
Limit Login Attempts Security1,000,000+3.3.10Not on the pages we openedcalls spl_object_hash(); returns a value from a constructor
Safe SVG1,000,000+2.5.2Not on the pages we openedcalls spl_object_hash()
Speed Optimizer1,000,000+7.8.5Yes: logged on a normal page loadreturns a value from a constructor
ManageWP Worker1,000,000+4.9.38Not on the pages we openedcalls is_integer() / is_long(); calls spl_object_hash(); returns a value from a constructor
Smush1,000,000+4.3.5Not on the pages we openedcalls spl_object_hash(); bundled Guzzle Promises Is class
Redux Framework900,000+4.5.16Not on the pages we openedcalls is_integer() / is_long()
W3 Total Cache900,000+2.11.0Yes: logged on a normal page loadreturns a value from a constructor; returns a value from a destructor; calls spl_object_hash(); bundled Guzzle Promises Is class; calls is_double()
WPvivid900,000+0.9.136Not on the pages we openedcalls is_integer() / is_long(); calls spl_object_hash()
Fluent Forms800,000+6.2.16Not on the pages we openedcalls spl_object_hash(); calls is_double()
Google for WooCommerce800,000+3.10.0Not run (needs WooCommerce active)calls spl_object_hash(); calls is_integer() / is_long(); calls is_double(); bundled Guzzle Promises Is class
WooCommerce PayPal Payments800,000+4.2.0Not run (needs WooCommerce active)class constant named NAMESPACE
Kadence Security700,000+10.0.6Not on the pages we openedreturns a value from a constructor
Joinchat700,000+6.4.2Yes: logged on a normal page loadclass constant named NAMESPACE
GTM4WP700,000+2.0.6Not on the pages we openedclass constant named NAMESPACE
FluentSMTP700,000+2.4.1Not on the pages we openedreturns a value from a constructor; calls spl_object_hash(); bundled Guzzle Promises Is class
MainWP Child700,000+6.3Not on the pages we openedcalls mbregex functions (mb_ereg_*); calls spl_object_hash()
Backuply600,000+1.6.0Not on the pages we openedreturns a value from a constructor; calls is_integer() / is_long()
Website Builder by SeedProd600,000+6.20.10Yes: logged on a normal page loadreturns a value from a constructor
Enable Media Replace600,000+4.2.3Not on the pages we openedreturns a value from a constructor
Forminator Forms600,000+1.58.3Not on the pages we openedcalls spl_object_hash(); bundled Guzzle Promises Is class
Post Types Order600,000+2.5.9Yes: logged on a normal page loadreturns a value from a constructor
The Events Calendar600,000+6.18.2Yes: logged on a normal page loadclass constant named NAMESPACE; returns a value from a constructor; calls is_integer() / is_long(); calls spl_object_hash()

One shared cause: Guzzle Promises' Is class

PHP 8.6 deprecates is as a class name. The Guzzle HTTP library's promises package has a class called Is, and its own code uses it, so PHP logs Deprecated: Using "is" as a class name is deprecated since 8.6 whenever a plugin makes an HTTP request through a bundled Guzzle. Guzzle fixed this on 18 October 2026: guzzlehttp/promises 2.6.0 and 3.1.0 use a new State class instead. These plugins still bundle an older copy: Yoast SEO, Site Kit by Google, UpdraftPlus, WP Mail SMTP by WPForms, Duplicator, Smush, W3 Total Cache, Google for WooCommerce, FluentSMTP, Forminator Forms. The fix for their authors is to update the bundled guzzlehttp/promises. Site owners can't patch it themselves; wait for the plugin update.

What PHP 8.6 deprecates that these plugins use

PHP 8.6 messageFix in the plugin's code
Returning a value from a constructor is deprecatedUse a bare return; in __construct(). new always returns the object.
Declaring class constant called 'namespace' is deprecatedRename the constant (NAMESPACE counts: PHP compares keywords case-insensitively).
Using "is" as a class name is deprecated since 8.6Update bundled guzzlehttp/promises to 2.6.0 or 3.1.0.
Calling is_a() with a string when $allow_string is false$value instanceof ClassName, or pass true as the third argument
Function spl_object_hash() is deprecated since 8.6spl_object_id()
Function is_integer() is deprecated since 8.6 (also is_long())is_int()
Function is_double() is deprecated since 8.6is_float()
mb_ereg_replace(), mb_regex_encoding()… (mbregex)preg_* with the /u flag
Function strcoll() is deprecated since 8.6Collator::compare()

Smaller plugins: details

Redux Framework 4.5.16 (900,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
redux-core/inc/extensions/repeater/repeater/class-redux-repeater.php:238calls is_integer() / is_long()
if ( isset( $this->field['limit'] ) && is_integer( $this->field['limit'] ) ) {
When this code runsnot on the pages we opened
redux-core/inc/extensions/repeater/repeater/class-redux-repeater.php:405calls is_integer() / is_long()
if ( isset( $field['limit'] ) && is_integer( $field['limit'] ) ) {
When this code runsnot on the pages we opened

W3 Total Cache 2.11.0 (900,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
w3-total-cache-api.php:608returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load
Cache_Memcache.php:71returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
Cache_Memcache.php:80returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
Cache_Memcached.php:63returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
Cache_Memcached.php:65returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
Cache_Memcached.php:69returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
Cache_Nginx_Memcached.php:54returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
Cache_Nginx_Memcached.php:56returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
Cache_Nginx_Memcached.php:60returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/Db/mssql.php:567 (bundled library)returns a value from a destructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/lib/requestcore/requestcore.class.php:225 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/lib/requestcore/requestcore.class.php:245 (bundled library)returns a value from a destructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/lib/requestcore/requestcore.class.php:1005 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/sdk.class.php:386 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/sdk.class.php:393 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/services/sns.class.php:141 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/services/sns.class.php:144 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/utilities/request.class.php:62 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/SNS/utilities/utilities.class.php:61 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
vendor/aws/aws-crt-php/src/AWS/CRT/NativeResource.php:24 (bundled library)calls spl_object_hash()
self::$resources[spl_object_hash($this)] = 1;
When this code runsnot on the pages we opened
vendor/aws/aws-crt-php/src/AWS/CRT/NativeResource.php:40 (bundled library)calls spl_object_hash()
unset(self::$resources[spl_object_hash($this)]);
When this code runsnot on the pages we opened
vendor/aws/aws-sdk-php/src/HandlerList.php:373 (bundled library)calls spl_object_hash()
return 'callable(' . spl_object_hash($fn) . ')';
When this code runsnot on the pages we opened
vendor/aws/aws-sdk-php/src/TraceMiddleware.php:160 (bundled library)calls spl_object_hash()
'instance' => spl_object_hash($cmd),
When this code runsnot on the pages we opened
vendor/aws/aws-sdk-php/src/TraceMiddleware.php:171 (bundled library)calls spl_object_hash()
'instance' => spl_object_hash($request),
When this code runsnot on the pages we opened
vendor/aws/aws-sdk-php/src/TraceMiddleware.php:185 (bundled library)calls spl_object_hash()
'instance' => spl_object_hash($response),
When this code runsnot on the pages we opened
vendor/aws/aws-sdk-php/src/TraceMiddleware.php:196 (bundled library)calls spl_object_hash()
'instance' => spl_object_hash($value),
When this code runsnot on the pages we opened
vendor/aws/aws-sdk-php/src/TraceMiddleware.php:208 (bundled library)calls spl_object_hash()
'instance' => spl_object_hash($e),
When this code runsnot on the pages we opened
vendor/guzzlehttp/promises/src/Is.php:7 (bundled library)bundled Guzzle Promises Is classCompile time: logged when PHP loads the filenot on the pages we opened
vendor/microsoft/azure-storage-common/src/Common/Internal/Utilities.php:879 (bundled library)calls is_double()
return is_numeric($value) && is_double($value + 0);
When this code runsnot on the pages we opened
vendor/sebastian/recursion-context/src/Context.php:129 (bundled library)calls spl_object_hash()
return @spl_object_hash($object);
When this code runsnot on the pages we opened
vendor/sebastian/recursion-context/src/Context.php:152 (bundled library)calls spl_object_hash()
return @spl_object_hash($value);
When this code runsnot on the pages we opened

WPvivid 0.9.136 (900,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
includes/zip/class-wpvivid-pclzip.php:299calls is_integer() / is_long()
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
When this code runsnot on the pages we opened
includes/zip/class-wpvivid-pclzip.php:482calls is_integer() / is_long()
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
When this code runsnot on the pages we opened
includes/zip/class-wpvivid-pclzip.php:735calls is_integer() / is_long()
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
When this code runsnot on the pages we opened
includes/zip/class-wpvivid-pclzip.php:896calls is_integer() / is_long()
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
When this code runsnot on the pages we opened
includes/zip/class-wpvivid-pclzip.php:1482calls is_integer() / is_long()
if ((!is_integer($v_value)) || ($v_value<0)) {
When this code runsnot on the pages we opened
includes/zip/class-wpvivid-pclzip.php:1649calls is_integer() / is_long()
else if (is_integer($p_options_list[$i+1])) {
When this code runsnot on the pages we opened
includes/zip/class-wpvivid-pclzip.php:1947calls is_integer() / is_long()
if (!is_integer($v_value)) {
When this code runsnot on the pages we opened
vendor/guzzle/guzzle/src/Guzzle/Http/Exception/MultiTransferException.php:67 (bundled library)calls spl_object_hash()
->exceptionForRequest[spl_object_hash($request)] = $exception;
When this code runsnot on the pages we opened
vendor/guzzle/guzzle/src/Guzzle/Http/Exception/MultiTransferException.php:81 (bundled library)calls spl_object_hash()
$oid = spl_object_hash($request);
When this code runsnot on the pages we opened
vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaValidator.php:196 (bundled library)calls is_integer() / is_long()
if ($this->castIntegerToStringType && $param->getType() == 'string' && is_integer($value)) {
When this code runsnot on the pages we opened
vendor/guzzle/guzzle/src/Guzzle/Service/Description/SchemaValidator.php:274 (bundled library)calls is_integer() / is_long()
} elseif ($t == 'integer' && is_integer($value)) {
When this code runsnot on the pages we opened
vendor/guzzlehttp/guzzle/src/HandlerStack.php:271 (bundled library)calls spl_object_hash()
return 'callable(' . spl_object_hash($fn) . ')';
When this code runsnot on the pages we opened
vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:5554 (bundled library)calls spl_object_hash()
return '{' . spl_object_hash($this) . '}';
When this code runsnot on the pages we opened

Fluent Forms 6.2.16 (800,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
vendor/wpfluent/framework/src/WPFluent/Database/Orm/Concerns/HasGlobalScopes.php:26 (bundled library)calls spl_object_hash()
return static::$globalScopes[static::class][spl_object_hash($scope)] = $scope;
When this code runsnot on the pages we opened
vendor/wpfluent/framework/src/WPFluent/Database/Query/WPDBConnection.php:496 (bundled library)calls is_double()
} elseif (is_double($binding)) {
When this code runsnot on the pages we opened
vendor/wpfluent/framework/src/WPFluent/Support/Once.php:45 (bundled library)calls spl_object_hash()
return is_object($argument) ? spl_object_hash($argument) : $argument;
When this code runsnot on the pages we opened

Google for WooCommerce 3.10.0 (800,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
vendor/google/gax/src/Testing/MessageAwareExporter.php:42 (bundled library)calls spl_object_hash()
\spl_object_hash($value)
When this code runsnot on the pages we opened
vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php:122 (bundled library)calls is_integer() / is_long()
is_integer($var) ||
When this code runsnot on the pages we opened
vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php:853 (bundled library)calls is_integer() / is_long()
if (is_integer($value)) {
When this code runsnot on the pages we opened
vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php:1183 (bundled library)calls is_double()
} elseif (is_double($array) || is_integer($array)) {
When this code runsnot on the pages we opened
vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php:1183 (bundled library)calls is_integer() / is_long()
} elseif (is_double($array) || is_integer($array)) {
When this code runsnot on the pages we opened
vendor/guzzlehttp/promises/src/Is.php:7 (bundled library)bundled Guzzle Promises Is classCompile time: logged when PHP loads the filenot on the pages we opened
vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:5554 (bundled library)calls spl_object_hash()
return '{' . spl_object_hash($this) . '}';
When this code runsnot on the pages we opened
vendor/symfony/validator/Context/ExecutionContext.php:362 (bundled library)calls spl_object_hash()
$this->cachedObjectsRefs[$object] = spl_object_hash($object);
When this code runsnot on the pages we opened
vendor/symfony/validator/Validator/RecursiveContextualValidator.php:773 (bundled library)calls spl_object_hash()
$cacheKey = spl_object_hash($object);
When this code runsnot on the pages we opened

WooCommerce PayPal Payments 4.2.0 (800,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
modules/ppcp-settings/src/Endpoint/RestEndpoint.php:21class constant named NAMESPACECompile time: logged when PHP loads the filenot on the pages we opened
modules/ppcp-store-sync/src/Endpoint/AgenticRestEndpoint.php:39class constant named NAMESPACECompile time: logged when PHP loads the filenot on the pages we opened
modules/ppcp-wc-gateway/src/Endpoint/ShippingCallbackEndpoint.php:19class constant named NAMESPACECompile time: logged when PHP loads the filenot on the pages we opened
modules/ppcp-webhooks/src/IncomingWebhookEndpoint.php:27class constant named NAMESPACECompile time: logged when PHP loads the filenot on the pages we opened

Kadence Security 10.0.6 (700,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
core/modules/two-factor/providers/class.two-factor-backup-codes.php:53returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
core/modules/two-factor/providers/class.two-factor-email.php:39returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened

Joinchat 6.4.2 (700,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
includes/class-joinchat-abilities.php:25class constant named NAMESPACECompile time: logged when PHP loads the fileon every front-end page load

GTM4WP 2.0.6 (700,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
src/Modules/WooCommerce/StoreApiData.php:35class constant named NAMESPACECompile time: logged when PHP loads the filenot on the pages we opened

FluentSMTP 2.4.1 (700,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
app/Services/Html2Text.php:241returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
includes/libs/google-api-client/build/vendor/guzzlehttp/guzzle/src/HandlerStack.php:236 (bundled library)calls spl_object_hash()
return 'callable(' . \spl_object_hash($fn) . ')';
When this code runsnot on the pages we opened
includes/libs/google-api-client/build/vendor/guzzlehttp/promises/src/Is.php:6 (bundled library)bundled Guzzle Promises Is classCompile time: logged when PHP loads the filenot on the pages we opened
includes/libs/google-api-client/build/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:4670 (bundled library)calls spl_object_hash()
return '{' . \spl_object_hash($this) . '}';
When this code runsnot on the pages we opened

MainWP Child 6.3 (700,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
class/class-mainwp-helper.php:905calls mbregex functions (mb_ereg_*)
$filename = mb_ereg_replace( '([^\w\s\d\-_~,;:\[\]\(\).])', '', $filename );
When this code runsnot on the pages we opened
class/class-mainwp-helper.php:907calls mbregex functions (mb_ereg_*)
$filename = mb_ereg_replace( '([\.]{2,})', '', $filename );
When this code runsnot on the pages we opened
libs/phpseclib/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:5554 (bundled library)calls spl_object_hash()
return '{' . spl_object_hash($this) . '}';
When this code runsnot on the pages we opened

Backuply 1.6.0 (600,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
backuplytar.php:66returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
backuplytar.php:83returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
restore_ins.php:295returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
restore_ins.php:312returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
lib/ftp.php:262 (bundled library)calls is_integer() / is_long()
if(!is_long($port)) {
When this code runsnot on the pages we opened

Website Builder by SeedProd 6.20.10 (600,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
app/render-csp-mm.php:34returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load
app/render-csp-mm.php:45returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load

Enable Media Replace 4.2.3 (600,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
build/shortpixel/filesystem/src/Model/File/FileModel.php:62 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened
build/shortpixel/replacer2/src/Modules/SmartSlider.php:34 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the filenot on the pages we opened

Forminator Forms 1.58.3 (600,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
addons/pro/googlesheet/lib/external/vendor-prefixed/guzzlehttp/guzzle/src/HandlerStack.php:236 (bundled library)calls spl_object_hash()
return 'callable(' . \spl_object_hash($fn) . ')';
When this code runsnot on the pages we opened
addons/pro/googlesheet/lib/external/vendor-prefixed/guzzlehttp/promises/src/Is.php:6 (bundled library)bundled Guzzle Promises Is classCompile time: logged when PHP loads the filenot on the pages we opened
addons/pro/googlesheet/lib/external/vendor-prefixed/phpseclib/phpseclib/phpseclib/Net/SSH2.php:4558 (bundled library)calls spl_object_hash()
return '{' . \spl_object_hash($this) . '}';
When this code runsnot on the pages we opened
library/lib/hub-connector/lib/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:4746 (bundled library)calls spl_object_hash()
return '{' . spl_object_hash($this) . '}';
When this code runsnot on the pages we opened

Post Types Order 2.5.9 (600,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
compatibility/LiteSpeed_Cache.php:20returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load
compatibility/formidable.php:21returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load

The Events Calendar 6.18.2 (600,000+ installs)

File:lineWhatWhen PHP 8.6 complainsIn our WordPress test
common/src/Common/REST/Controller.php:32class constant named NAMESPACECompile time: logged when PHP loads the fileon every front-end page load
common/vendor/phpqrcode/qrencode.php:82 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load
common/vendor/phpqrcode/qrinput.php:50 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load
common/vendor/phpqrcode/qrinput.php:288 (bundled library)returns a value from a constructorCompile time: logged when PHP loads the fileon every front-end page load
src/Tribe/Venue.php:928calls is_integer() / is_long()
if ( is_integer( $event ) ) {
When this code runsnot on the pages we opened
src/Tribe/Views/V2/Views/Traits/HTML_Cache.php:204calls spl_object_hash()
$key = spl_object_hash( $context ) . '_cache_html_key';
When this code runsnot on the pages we opened
common/vendor/vendor-prefixed/lucatume/di52/src/Container.php:685 (bundled library)calls spl_object_hash()
$callbackIdPrefix = is_object($id) ? spl_object_hash($id) : $id;
When this code runsnot on the pages we opened

No PHP 8.6 findings (61 plugins)

Contact Form 7, Classic Editor, Akismet Anti-spam, All-in-One WP Migration and Backup, WPForms, Duplicate Page, Yoast Duplicate Post, Hostinger Tools, WPCode, Jetpack, Advanced Custom Fields, Classic Widgets, Ultimate Addons for Elementor, Redirection, WordPress Importer, WPS Hide Login, All-In-One Security, Starter Templates, Better Search Replace, Code Snippets, CookieYes, Custom Post Type UI, Disable Comments, Essential Addons for Elementor, XML Sitemap Generator for Google, Hostinger Reach, Image Optimizer, Loco Translate, Loginizer, MC4WP, Maintenance, One Click Demo Import, Popup Builder & Popup Maker for WordPress, Regenerate Thumbnails, AI Agent by SiteGround, Security Optimizer, SVG Support, Advanced Editor Tools, Spectra Legacy, WP Fastest Cache, File Manager, WP Multibyte Patch, WP-Optimize, Widgets for Google Reviews, WP Super Cache, Translate WordPress with GTranslate, Imagify Image Optimization, Polylang, Autoptimize, Breadcrumb NavXT, Cookie Compliance for WordPress, Flamingo, Smart Slider 3, WooPayments, Antispam Bee, User Role Editor, WooCommerce Stripe Payment Gateway, Click to Chat, Popup Maker, Premium Addons for Elementor, TablePress.

The full data (every finding with file, line and when it fires, as CSV and JSON) is on GitHub: php86-wordpress-plugin-deprecations (CC BY 4.0).

Check your own site

Free plugin: PHP Upgrade Readiness (zip, 21 KB). Install it on the site you want to check (Plugins → Add New → Upload Plugin), then open Tools → PHP Upgrade Readiness. It runs on your current PHP (7.4 or newer) and lists every plugin and theme with code that PHP 8.1 to 8.6 deprecate: file, line, the message PHP prints and the fix, plus a Site Health check and a CSV export. It reads files only and sends nothing anywhere. On these 100 plugins it reported every one of the 1,171 places the real PHP 8.6 flagged, and nothing else. Some notices only appear while code runs (for example is_a() called with a string), so also test on a staging copy:

Still on PHP 7.4, 8.0 or 8.1? The two critical flaws fixed on 21 October 2026 (CVE-2026-109618 and CVE-2026-109619) got new releases only for PHP 8.2 and newer; for older versions the PHP project points to your vendor or an upgrade (php.net advisory). Go to a patched 8.3 or 8.4 (8.2.35 is patched too, but PHP 8.2 ends on 31 December 2026). The plugin also checks the PHP 8.1, 8.2 and 8.3 deprecations you cross on the way.

  1. When your host offers PHP 8.6, switch a staging copy first, with define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); in wp-config.php.
  2. Click through the front end and wp-admin, then list the PHP 8.6 notices:
    grep "PHP Deprecated" wp-content/debug.log | grep -E "since 8\.6|from a constructor|called 'namespace'" | sort | uniq -c
  3. Each line names the plugin folder. Look it up in the table above; if the plugin is not listed, send its author the line.
  4. On the live site keep display_errors off; deprecations are warnings, not a reason to stay on old PHP.

How we tested (and what we didn't)

Sources

Did this fix it?

What's still not working?

Describe what happens and paste any error message. We read every report and fix the page.