
PHP Upgrade Check for WooCommerce — what breaks when you move to PHP 8.3, 8.4 or 8.5
Before your host moves the shop to PHP 8.3, 8.4 or 8.5, the plugin reads the code of every plugin and theme and shows what will break: the plugin, the file, the line and the fix. The verdict counts only what changes between the PHP you run and the target. Nothing is executed or changed. Free: scan, report, findings, CSV, Site Health, WP-CLI. Pro: a log of PHP errors while the site runs, a check after updates, a weekly report.
- Compatibility
- WordPress 6.2+ · PHP 7.2+ (tested on PHP 7.4 and 8.3) · WooCommerce optional (tested with 9.9.5 and 11.2.1) · HPOS · multisite · reports for PHP 7.4, 8.0, 8.1, 8.2, 8.3, 8.4 and 8.5
- Licence
- one site, annual
- Trial
- 7 days, no card, one per site
- Updated
- October 2026
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.
What it looks like
Key points
What customers see
Nothing. The plugin works only in the admin area: it does not change the shop’s pages and shows nothing on the storefront.
How much it costs
The base version is 0 UAH, with no time limit and no limit on the number of plugins: the scan, the report for every PHP version, findings with fixes, the server overview, CSV, Site Health, WP-CLI.

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. For studios — keys for 5 or 25 sites, or unlimited.
Technical requirements
WordPress 6.2+ · PHP 7.2+ (runs tested on PHP 7.4 and 8.3, the code’s syntax on 7.2 and 8.5) · PHP’s standard tokenizer extension, which is on by default.
WooCommerce — optional: the plugin checks any WordPress site, and with WooCommerce it also marks its extensions and shows the PHP version WooCommerce itself needs. Tested with WooCommerce 11.2.1 and 9.9.5; HPOS compatibility is declared.
Multisite — network activation; the report covers the plugins and themes of the whole network, only super admins see the screen.
Reports — for PHP 7.4, 8.0, 8.1, 8.2, 8.3, 8.4 and 8.5.
Interface languages: English, українська, русский.
Version history
A scan of plugins, themes, must-use plugins and drop-ins against the PHP 7.0–8.5 changes, a report for PHP 7.4–8.5 with a verdict for every plugin and theme (only what changes between the…
Frequently bought with PHP Upgrade Check for WooCommerce
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — Nova Poshta for WooCommerce

Mono Acquiring — monobank card payments for WooCommerce

Telegram notifications and Viber/SMS for customers for WooCommerce
Full module description
PHP Upgrade Check for WooCommerce checks the plugins and themes of your shop before a move to a newer PHP version and shows exactly what will break: the plugin, the file, the line, the code and how to fix it. You pick the version you are moving to — 7.4, 8.0, 8.1, 8.2, 8.3, 8.4 or 8.5 — and the plugin compares the code with everything PHP removed or changed from 7.0 to 8.5. The scan runs on the PHP you have today (7.2 or newer), so you see the result before your host switches anything.
Hosts are moving sites off old PHP versions: PHP 7.4 has had no security fixes since November 2022, PHP 8.1 since the end of 2025, and PHP 8.2 loses them on 31 December 2026. For a WooCommerce shop the question is always the same — will the checkout still work after the switch? One old plugin calling a removed function is enough for a customer to see a fatal error instead of the page.
How the verdict is counted. Only what changes between the PHP the site runs today and the target goes into the verdict. Code that would already fail on the current PHP — say, mysql_* functions, removed in PHP 7.0, on a PHP 8.3 server — is either never used or already broken, and moving to a newer version does not change it. Such findings are listed on the Findings tab with the note “not counted in the verdict”, but they do not make the plugin Will break. Encoded files and a Requires PHP header above the target version always count.
What the plugin does not promise. The scan reads code and cannot see what happens only at run time: a null passed to a PHP function, a property created on the fly, data from the database. Ready means nothing was found in the code for the chosen PHP version — not a guarantee. After the switch, test the shop, the checkout above all, and keep a backup you can restore.
Running OpenCart? There is a separate module for OpenCart 4, 3 and 2.3 — PHP Upgrade Check for OpenCart.
What customers see
Nothing. The plugin works only in the admin area: it does not change the shop’s pages and shows nothing on the storefront. The scan runs in short steps of a few seconds in the administrator’s browser tab, and the site keeps working as usual.
The runtime log in Pro collects PHP messages during the site’s normal requests, but never shows them to visitors and does not change how PHP and other plugins (Query Monitor, for example) handle errors: every message is passed on, exactly as without the plugin. It records at most 50 different messages per request and keeps up to 2,000 rows from the last 60 days.
What the admin gets
- Server overview — the PHP version and until when it gets security fixes (php.net data), whether a newer patch release of your branch exists (with a note that Linux distributions sometimes backport fixes without changing the number), whether your WordPress version supports the target PHP, the PHP version WooCommerce needs, whether the ionCube Loader is installed and which PHP extensions disappear in the new version.
- Report for the chosen PHP version — counters for Will break, Encoded — ask the vendor, Works differently, Deprecation notices and Ready, and a row for every plugin and theme, must-use plugins and drop-ins. The target version switches without scanning again.
- What to do — in the plugin’s row: “Update to 6.2.3 first, then scan again” when the new version of the plugin itself supports the target PHP; “Part of it already fails on PHP 8.3 — that code is either never used or already broken”; WooCommerce extension and “Requires PHP 7.4” marks from the plugin header.
- Scan again for a single plugin or theme — no need to scan the whole site after an update.
- Will break — code that stops working on the target PHP: the file does not load because of syntax PHP no longer understands, or a call ends in a fatal error. A plugin whose
Requires PHPheader is above the target version also lands here. - Works differently — the code runs, but not as before: for example, a PHP 4 style constructor, which since PHP 8.0 is no longer called when the object is created.
- Deprecation notices — the plugin works, but PHP reports deprecations: they fill the error log and turn into errors in a later version.
- Findings — for each: severity and the PHP version that changed it, what exactly is wrong and how to fix it, a php.net link, the plugin, file, line and the code itself. Filter by plugin and severity.
- Guarded code — lines inside a PHP version check,
function_exists(),extension_loaded()ordefined(), and a plugin’s own replacement of a removed function are marked guarded and do not count. You can see them by picking them in the filter. - CSV — all findings in one file for your developer, your host’s support or the plugin’s author: comma or semicolon, with a BOM and protection against formulas, opens in Excel and Google Sheets.
- WP-CLI:
wp catcode-php-check scan,wp catcode-php-check report --target=8.4 --format=json,wp catcode-php-check export report.csv.
- Site Health — a test that says how many active plugins and themes will break on the target PHP. It is critical when the current PHP no longer gets security fixes, and a recommendation while it still does.
- Pro: runtime log — PHP deprecation notices and fatal errors while the site runs, grouped by plugin and theme, with the file, line, number of times, date and PHP version. Turn it on before you switch PHP and read it after: it catches what a scan of the code cannot see.
- Pro: re-scan after updates — a plugin or theme that WordPress has updated is scanned again in the background, and the report shows its new verdict.
- Pro: weekly report — a scan in the background once a week and an e-mail with the result to the address you set or to the site administrator.
How it works, step by step
- Tools → PHP Upgrade Check. The plugin shows right away which PHP the site runs and until when that version gets security fixes.
- In “Moving to PHP” keep the suggested version (8.3 for sites on PHP older than 8.3, otherwise the next branch) or pick your own, and click “Run the scan”.
- The plugin lists the code: active plugins, the theme (child and parent), must-use plugins, drop-ins; inactive ones if you want. Tests folders are skipped, because they never run on a live site.
- Every PHP file is read with PHP’s tokenizer and checked against the rules: removed functions, extensions and constants, syntax that no longer loads, changed behaviour, deprecations in PHP 8.0–8.5. Nothing is executed. The scan runs in steps of a few seconds; close the tab and “Continue the scan” picks up where it stopped.
- The report: a verdict for every plugin and theme, Details with the findings and fixes, CSV for your developer. Another target version is in the same report, without scanning again.
- Then follow the hint on the plugin’s screen: a full backup, plugin updates and a new scan, a question to the authors of whatever is Will break or Encoded, a test switch on a staging copy, then the switch in the hosting panel at a quiet time, and right after it a check of the home page, a product, the cart and the checkout. If something breaks, switch PHP back in the panel — the files and the database stay as they were.
A test shop with 76 plugins (inactive ones included), themes, must-use plugins and drop-ins — 40,731 files — was scanned in 53 seconds in twelve steps, using up to 94 MB of memory; no request came near max_execution_time of 30 seconds. With a hard memory_limit of 128M the plugin skipped two files of about 1 MB that would not have fit into memory and named them in the report. Files over 3 MB are skipped with a note too.
How much it costs
Pro — 990 UAH, a one-year licence. A year of updates, technical support and all Pro features: runtime log, re-scan after updates, weekly report.
You can take a longer term right away — the longer, the cheaper per year:
- 1 year — 990 UAH
- 2 years — 1,880 UAH (−5%, 940 UAH per year)
- 3 years — 2,610 UAH (−12%, 870 UAH per year)
- 4 years — 3,250 UAH (−18%, 810 UAH per year)
- 5 years — 3,710 UAH (−25%, 740 UAH per year)
No automatic charges: you renew manually, and reminders come by e-mail. A purchased licence keeps the Pro features for good — when the term ends, the site simply stops getting new versions and support.
The base key covers one site; for several shops and for studios there are keys for 5 and 25 sites and an unlimited one — pick them at the top of this page. Moving the shop — press “Release licence” on the old site and activate the key on the new one. On multisite, every subsite is a separate site for the licence.
Trial first, payment later. The free 7-day Pro trial starts with the “Try it for 7 days” button at the top of this page or “Try Pro for 7 days” in the settings of the Pro build; the key arrives by e-mail, no card needed, and the trial never starts by itself. When the trial ends the Pro features switch off; the scan, the report, the findings and CSV keep working.
Under the hood
- PHP’s tokenizer (
token_get_all()) instead of running the code: files are only read, nothing is included, and no code leaves the server. - Rules for the PHP 7.0–8.5 changes: syntax that no longer loads (curly braces for a string offset, nested ternaries without parentheses, the
(real)and(unset)casts,=& new, classes named after new reserved words), removed functions (each(),create_function(),get_magic_quotes_gpc(),money_format(), theeregfamily and others), removed extensions (mysql,mcrypt,xmlrpc,imap,pspell,oci8), calls that became fatal (implode()with the array first,parse_str()without a result,mktime()without arguments), changed behaviour (PHP 4 style constructors,is_resource()on resources that became objects,assert()with code in a string), deprecations up to PHP 8.5 (implicitly nullable parameters, return types for 188 built-in classes and interfaces,utf8_encode(),strftime(),FILTER_SANITIZE_STRING,E_STRICT,curl_close(),imagedestroy()and more). - Checked against PHP itself: on 40,768 files of 70 plugins the scan found all 557 deprecations PHP 8.5 reports at compile time, and the files that do not compile on PHP 8.5 were exactly the files where it found syntax that no longer loads (10 out of 10). The findings are the same whether the scan runs on PHP 7.4, 8.3 or 8.5.
- Guarded code — a PHP version check,
function_exists(),extension_loaded()ordefined()around the code or before&&,||and?, and a plugin’s own replacement of a removed function are recognised, so code written for both versions does not raise false alarms. - Steps with a lock: the scan runs one step at a time — a second tab, WP-Cron and WP-CLI never read the same files at once; a memory guard skips files that are too big and names them in the report; a folder PHP may not read does not end the scan — the report says how many files could not be read.
- php.net data about PHP branches is cached for 12 hours; with the request switched off the plugin uses its built-in list. The table of WordPress and PHP compatibility is built into the plugin.
- Own tables for findings and the runtime log; deleting the plugin removes its tables, settings and scheduled events, on multisite from every site.
How to install
- Plugins → Add New → Upload Plugin: choose
catcode-php-upgrade-check-for-woocommerce-free-1.0.0.zipand activate it. - Tools → PHP Upgrade Check → pick the version in “Moving to PHP” → “Run the scan”.
- Read the report and the Details with fixes, and download the CSV for your developer if you need it.
- For Pro: upload the Pro build over the free one (WordPress offers to replace the installed version) and paste the licence key from the e-mail on the Settings tab — or click “Try Pro for 7 days” there.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
Does the plugin change anything on my site?
No. The scan only reads PHP files with PHP's tokenizer: it does not execute, include or edit them and does not switch PHP. The results go into the plugin's own tables. The runtime log in Pro only records PHP messages and passes each one on, exactly as without the plugin.
Does it need WooCommerce?
No. It checks any WordPress site. With WooCommerce active, the report also marks WooCommerce extensions and shows the PHP version WooCommerce itself needs.
My site is on PHP 7.2 or 7.4. Can I check it for PHP 8.3?
Yes — that is what it is for. The scan runs on the PHP you have today (7.2 or newer) and the report is built for the version you choose.
The plugin found each() in a plugin, but the verdict is not Will break. Why?
The verdict counts only what changes between the PHP the site runs today and the target. each() was removed in PHP 8.0: on a PHP 8.3 server that code is either never used or already broken, and moving to 8.4 changes nothing about it. Such findings stay on the Findings tab with the note "not counted in the verdict", and the plugin's row says "Part of it already fails on PHP 8.3". On a PHP 7.4 site the same each() makes the plugin Will break in the report for 8.3.
Is a plugin marked Ready guaranteed to work?
No scan of the code can promise that. Ready means nothing was found in the code for the chosen PHP version. Some changes show up only at run time (a null passed to a PHP function, a property created on the fly) — that is what the runtime log in Pro is for. After the switch, test the shop, the checkout above all, and keep a backup you can restore.
What about encoded (ionCube) plugins?
Encoded files cannot be read. They run only on the PHP versions their encoder and the loader on the server support, so the report marks such a plugin Encoded — ask the vendor and shows whether the ionCube Loader is installed.
How does it work on multisite?
The plugin is network-activated, and the report on any site covers the plugins and themes used across the network, since the network runs one PHP. Only super admins see the screen. For the licence, every subsite of a multisite is a separate site: the key is activated on the address of the site where you entered it.
Will the scan load the server?
The scan runs in the admin area in short steps of a few seconds. A test shop with 76 plugins — 40,731 files — was scanned in 53 seconds, using up to 94 MB of memory, and no step came near max_execution_time of 30 s. A file that would not fit into memory_limit is skipped and named in the report.
What does the plugin send out?
The free version asks php.net twice a day which release is the latest in each PHP branch and until when each branch gets security fixes. Nothing about your site is sent; you can switch the request off in the settings, and the plugin then uses its built-in list. Pro checks the licence key and the site address with the licence server on catcode.com.ua.
What if I do not want to pay for Pro?
The scan, the report for every PHP version, the findings with fixes, CSV, Site Health and WP-CLI stay free, with no time limit and no limit on the number of plugins.
What is left after I delete the plugin?
Nothing: its tables, settings and scheduled events are removed, on multisite from every site. If a second copy of the plugin sits in another folder, its data is left alone.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—
