I tested my WordPress sites to see how they fare with PHP 8.4.
For testing locally, Laragon 6 is still free and still works (my install and setup tutorial for Laragon 6 and latest PHP), while you can always use Local or LAMP for Linux (I don't use Macs, I'm poor, so I don't know what to recommend to Mac users
).
The GeneratePress theme works fine, and so does the latest & greatest WordPress version (6.7.2 at the time of writing). Some plugins, however, show PHP warnings (they work, but the code needs to be updated).
If thera aren't any warnings with PHP versions before the 8.x, it should not show any breaking errors with PHP 8.x (including the 8.4).
What I ran into were in fact only warnings - no breaking errors, at least not with the (good quality) plugins I tested. Here is a brief overview of the warnings I got:
Error: _load_textdomain_just_in_time was called incorrectly.
Fix: Ensure translations are loaded at the init hook instead of earlier.
Error: "Implicitly marking parameter $variable_name as nullable is deprecated, the explicit nullable type must be used instead".
Fix: Plugins need to be updated to explicitly define nullable types (e.g. ?DateTimeInterface $date instead of $date = null).
Error: Trying to access the array key "heading_label_tag" without checking if it exists first.
Fix: Check if the heading_label_tag key is set in the $settings array before trying to access it, thus preventing the warning.
Error: PHP 8.4 requires explicit nullable type declarations. This means parameters that can be null must be explicitly marked as nullable using the ? syntax.
Fix: For each of used functions, parameter declaration should be explicitly marked as nullable.
As always, your additions and especially corrections are more than welcome (and appologies for my Tarzan English
).
For testing locally, Laragon 6 is still free and still works (my install and setup tutorial for Laragon 6 and latest PHP), while you can always use Local or LAMP for Linux (I don't use Macs, I'm poor, so I don't know what to recommend to Mac users

The GeneratePress theme works fine, and so does the latest & greatest WordPress version (6.7.2 at the time of writing). Some plugins, however, show PHP warnings (they work, but the code needs to be updated).
General conclusion: it works, for the most part
I haven't tested many themes, but did test many plugins. Maybe some themes and plugins won't work - but I would say that generally (very generally):If thera aren't any warnings with PHP versions before the 8.x, it should not show any breaking errors with PHP 8.x (including the 8.4).
What I ran into were in fact only warnings - no breaking errors, at least not with the (good quality) plugins I tested. Here is a brief overview of the warnings I got:
PHP Notice: Translation Loading Too Early
Affected Plugin: WP YouTube Lyte.Error: _load_textdomain_just_in_time was called incorrectly.
Fix: Ensure translations are loaded at the init hook instead of earlier.
PHP Deprecated: Implicitly Marking Parameters as Nullable
Affected Plugins: Easy WP SMTP (and its ActionScheduler - WooCommerce dependency), and One Click Accessibility.Error: "Implicitly marking parameter $variable_name as nullable is deprecated, the explicit nullable type must be used instead".
Fix: Plugins need to be updated to explicitly define nullable types (e.g. ?DateTimeInterface $date instead of $date = null).
PHP Warning: Trying to access an array without checking it exists
Affected plugins: Easy Table of Contents.Error: Trying to access the array key "heading_label_tag" without checking if it exists first.
Fix: Check if the heading_label_tag key is set in the $settings array before trying to access it, thus preventing the warning.
PHP Deprecated: Explicit nullable type declarations required
Affected plugins: User Menus – Nav Menu Visibility, and Pods – Custom Content Types and Fields.Error: PHP 8.4 requires explicit nullable type declarations. This means parameters that can be null must be explicitly marked as nullable using the ? syntax.
Fix: For each of used functions, parameter declaration should be explicitly marked as nullable.
As always, your additions and especially corrections are more than welcome (and appologies for my Tarzan English

Last edited: