{"id":397592,"date":"2026-11-04T16:44:01","date_gmt":"2026-11-04T16:44:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/catcode-php-upgrade-check-for-woocommerce\/"},"modified":"2026-11-04T17:08:42","modified_gmt":"2026-11-04T17:08:42","slug":"catcode-php-upgrade-check-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/catcode-php-upgrade-check-for-woocommerce\/","author":23504569,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"6.2","requires_php":"7.2","requires_plugins":null,"header_name":"CatCode PHP Upgrade Check for WooCommerce","header_author":"CatCode","header_description":"Before your host moves the shop to PHP 8.3, 8.4 or 8.5, find the plugins and themes that would break: removed functions, syntax that no longer loads, deprecations and encoded files \u2014 with the file, the line and the fix.","assets_banners_color":"fdfdff","last_updated":"2026-11-04 17:08:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/catcode.com.ua\/modules\/catcode-php-upgrade-check-for-woocommerce\/","header_author_uri":"https:\/\/catcode.com.ua","rating":0,"author_block_rating":0,"active_installs":0,"downloads":94,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"catcodestudio","date":"2026-11-04 17:08:42","revision":3784446}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3784400,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3784400,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3784400,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3784400,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[265092,219646,258141,35037,286],"plugin_category":[45],"plugin_contributors":[271712],"plugin_business_model":[],"class_list":["post-397592","plugin","type-plugin","status-publish","hentry","plugin_tags-compatibility-checker","plugin_tags-php-8","plugin_tags-php-compatibility","plugin_tags-php-version","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-catcodestudio","plugin_committers-catcodestudio"],"banners":{"banner":"https:\/\/ps.w.org\/catcode-php-upgrade-check-for-woocommerce\/assets\/banner-772x250.png?rev=3784400","banner_2x":"https:\/\/ps.w.org\/catcode-php-upgrade-check-for-woocommerce\/assets\/banner-1544x500.png?rev=3784400","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/catcode-php-upgrade-check-for-woocommerce\/assets\/icon-128x128.png?rev=3784400","icon_2x":"https:\/\/ps.w.org\/catcode-php-upgrade-check-for-woocommerce\/assets\/icon-256x256.png?rev=3784400","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Hosts are moving sites off old PHP versions: PHP 8.1 gets no security fixes since the end of 2025, PHP 8.2 loses them at the end of 2026. For a WooCommerce shop the question is always the same \u2014 will the checkout still work after the switch?<\/p>\n\n<p>PHP Upgrade Check reads the code of your plugins and themes and compares it with what changed in PHP from version 7.0 to 8.5. It runs on the PHP you have today (7.2 or newer) and tells you, before anything is switched, which plugins will stop working on the version you are moving to.<\/p>\n\n<p><strong>The report<\/strong><\/p>\n\n<ul>\n<li>Pick the PHP version you are moving to: 7.4, 8.0, 8.1, 8.2, 8.3, 8.4 or 8.5. The report switches between versions without scanning again.<\/li>\n<li>A verdict for every active plugin and theme, must-use plugins and drop-ins: <strong>Will break<\/strong>, <strong>Encoded \u2014 ask the vendor<\/strong>, <strong>Works differently<\/strong>, <strong>Deprecation notices<\/strong>, <strong>Ready<\/strong>.<\/li>\n<li>For every finding: the file, the line, the code, what changed in PHP, since which version, and how to fix it, with a link to the PHP migration guide.<\/li>\n<li>Plugins with an update waiting are marked \"update first, then scan again\" \u2014 when the update itself supports the new PHP.<\/li>\n<li>WooCommerce extensions are marked, so you know which of them touch the shop.<\/li>\n<li>CSV export (comma or semicolon) for your developer, your host's support or the plugin's author.<\/li>\n<li>A Site Health test: Tools \u2192 Site Health shows how many active plugins would break.<\/li>\n<li>WP-CLI: <code>wp catcode-php-check scan<\/code>, <code>wp catcode-php-check report --target=8.4<\/code>, <code>wp catcode-php-check export report.csv<\/code>.<\/li>\n<\/ul>\n\n<p><strong>What it finds<\/strong><\/p>\n\n<ul>\n<li>Code that no longer loads at all \u2014 the whole file fails: curly-brace offsets (<code>$text{0}<\/code>), nested ternaries without parentheses, the <code>(real)<\/code> and <code>(unset)<\/code> casts, <code>=&amp; new<\/code>, classes named after new reserved words (<code>mixed<\/code>, <code>never<\/code>, <code>readonly<\/code>, <code>match<\/code>), a function called <code>match()<\/code> or <code>__autoload()<\/code>.<\/li>\n<li>Removed functions: <code>each()<\/code>, <code>create_function()<\/code>, <code>get_magic_quotes_gpc()<\/code>, <code>money_format()<\/code>, <code>split()<\/code>, the <code>ereg<\/code> family and many more.<\/li>\n<li>Extensions taken out of PHP: <code>mysql_*<\/code> (PHP 7.0), <code>mcrypt_*<\/code> (7.2), <code>xmlrpc_*<\/code> (8.0), <code>imap_*<\/code>, <code>pspell_*<\/code> and <code>oci_*<\/code> (8.4).<\/li>\n<li>Removed constants, calls that turned into fatal errors (<code>implode()<\/code> with the array first, <code>parse_str()<\/code> without a result, <code>mktime()<\/code> without arguments), and code that silently does something else: old-style constructors that no longer run, <code>is_resource()<\/code> on handles that became objects, <code>define()<\/code> with case-insensitive constants, <code>assert()<\/code> with code in a string, <code>preg_replace()<\/code> with <code>\/e<\/code>.<\/li>\n<li>Deprecations of every version up to 8.5: implicitly nullable parameters (8.4), missing return types on <code>Countable<\/code>, <code>ArrayAccess<\/code>, <code>Iterator<\/code>, <code>JsonSerializable<\/code> and other PHP interfaces (8.1), <code>utf8_encode()<\/code> (8.2), <code>strftime()<\/code> (8.1), <code>FILTER_SANITIZE_STRING<\/code> (8.1), <code>E_STRICT<\/code> (8.4), CSV functions without the escape argument (8.4), <code>curl_close()<\/code> and <code>imagedestroy()<\/code> (8.5), the backtick operator and non-canonical casts (8.5) and others.<\/li>\n<li>ionCube- and SourceGuardian-encoded files \u2014 they cannot be read, so the report tells you to ask the vendor.<\/li>\n<\/ul>\n\n<p>Code that already copes with both versions \u2014 inside a check of the PHP version, <code>function_exists()<\/code>, <code>extension_loaded()<\/code> or <code>defined()<\/code>, or a plugin that ships its own replacement of a removed function \u2014 is shown as \"guarded\" and does not count against the plugin.<\/p>\n\n<p><strong>Your server<\/strong><\/p>\n\n<ul>\n<li>The PHP version, until when it gets security fixes, and whether a newer patch release of the same branch exists (with a note about Linux distributions that backport fixes without changing the number).<\/li>\n<li>Whether your WordPress version supports the PHP you are moving to, and the PHP version WooCommerce needs.<\/li>\n<li>The ionCube Loader, and the extensions loaded today that the new PHP no longer ships.<\/li>\n<\/ul>\n\n<p><strong>How it works<\/strong><\/p>\n\n<p>The plugin reads the PHP files with PHP's own tokenizer. Nothing is executed, included or changed, and no code leaves your server. The scan runs in short steps, so a shop with WooCommerce and dozens of plugins does not hit the server's time limit; you can leave the page and continue later.<\/p>\n\n<p>A scan of the code cannot see everything that happens while the site runs \u2014 for example a <code>null<\/code> passed to a PHP function or a property created on the fly. Such cases appear as deprecation notices in the PHP error log after the switch.<\/p>\n\n<h3>External services<\/h3>\n\n<p>When \"Latest PHP releases\" is on (the default), the plugin asks php.net which release is the latest in each PHP branch and until when each branch gets security fixes, so it can tell you whether your PHP is up to date.<\/p>\n\n<ul>\n<li>Service: php.net release information, https:\/\/www.php.net\/releases\/branches.php<\/li>\n<li>When: when the plugin's screen or the Site Health test needs the data, at most twice a day (the answer is cached for 12 hours).<\/li>\n<li>Data sent: none besides the request itself (your server's IP address and a standard WordPress user agent, as with any web request). Nothing about your site, plugins or users is sent.<\/li>\n<li>Terms and privacy: https:\/\/www.php.net\/license\/ and https:\/\/www.php.net\/privacy.php<\/li>\n<\/ul>\n\n<p>Switch it off under Tools \u2192 PHP Upgrade Check \u2192 Settings; the plugin then uses the list of releases built into it.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Make sure WooCommerce is installed and active, then install and activate the plugin.<\/li>\n<li>Go to Tools \u2192 PHP Upgrade Check.<\/li>\n<li>Choose the PHP version you are moving to and click \"Run the scan\".<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20change%20anything%20on%20my%20site%3F\"><h3>Does it change anything on my site?<\/h3><\/dt>\n<dd><p>No. It only reads files. It does not switch PHP, does not edit plugins and does not execute their code.<\/p><\/dd>\n<dt id=\"does%20it%20need%20woocommerce%3F\"><h3>Does it need WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Since 1.0.1 WooCommerce is a required plugin: WordPress activates PHP Upgrade Check only while WooCommerce is installed and active. The report marks the WooCommerce extensions and shows the PHP version WooCommerce needs.<\/p><\/dd>\n<dt id=\"my%20site%20is%20on%20php%207.2%20%2F%207.4.%20can%20i%20check%20it%20for%20php%208.3%3F\"><h3>My site is on PHP 7.2 \/ 7.4. Can I check it for PHP 8.3?<\/h3><\/dt>\n<dd><p>Yes \u2014 that is what it is for. The scan runs on the PHP you have and reports for the version you choose.<\/p><\/dd>\n<dt id=\"is%20a%20plugin%20marked%20%22ready%22%20guaranteed%20to%20work%3F\"><h3>Is a plugin marked \"Ready\" guaranteed to work?<\/h3><\/dt>\n<dd><p>No tool can promise that by reading code. \"Ready\" means nothing was found that the chosen PHP version breaks. Test the shop after the switch \u2014 the checkout above all \u2014 and keep a backup you can restore.<\/p><\/dd>\n<dt id=\"why%20is%20wordpress%20itself%20not%20in%20the%20list%3F\"><h3>Why is WordPress itself not in the list?<\/h3><\/dt>\n<dd><p>WordPress publishes which PHP versions each release supports; the plugin shows that next to your WordPress version.<\/p><\/dd>\n<dt id=\"what%20about%20encoded%20%28ioncube%29%20plugins%3F\"><h3>What about encoded (ionCube) plugins?<\/h3><\/dt>\n<dd><p>Encoded files cannot be read. They run only on the PHP versions their encoder and the loader on the server support, so the report tells you to ask the vendor before the switch.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Declares WooCommerce as a required plugin (Requires Plugins header).<\/li>\n<li>WordPress core files are recognised through WPINC and the content folder instead of hardcoded wp-includes\/wp-admin paths.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Before your host moves the shop to PHP 8.3, 8.4 or 8.5, find the plugins and themes that would break \u2014 with the file, the line and the fix.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/397592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=397592"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/catcodestudio"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=397592"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=397592"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=397592"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=397592"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=397592"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=397592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}