Несовместимость PHP: плагины или тема не поддерживают актуальную версию PHP (8.x)
Короткий ответ: Ошибка совместимости с PHP 8.x проявляется как белый экран, HTTP 500 или предупреждение в админке после обновления PHP. Решение — обновить плагины и тему до последних версий, заменить устаревшие компоненты или включить временный fallback через
WP_ENVIRONMENT_TYPEи.htaccess. Мы в студии Gurupractice сталкиваемся с этим еженедельно и подготовили пошаговое руководство.
Почему вообще возникает эта ошибка
PHP — язык, на котором написан WordPress и большинство его плагинов. С каждой новой мажорной версией (7.4 → 8.0 → 8.1 → 8.2 → 8.3 → 8.4) разработчики PHP удаляют устаревшие функции, меняют поведение типов и ужесточают обработку ошибок.
Если плагин или тема не обновлялись 2–3 года, в их коде почти гарантированно используются конструкции, которые PHP 8.x считает фатальной ошибкой:
mysql_*функции — удалены в PHP 7.0, в 8.x их нет.each()— удалена в PHP 8.0.create_function()— удалена в PHP 8.0.- Неявное приведение типов — в PHP 8.x строже; код вида
if ($var = 'value')вместоif ($var == 'value')генерирует предупреждение или ошибку. implode()с переставленными аргументами — раньше прощалось, в 8.x — фатальная ошибка.
По данным статистики W3Techs, на начало 2026 года PHP 8.x используют более 78% всех сайтов на PHP. Хостинг-провайдеры один за другим прекращают поддержку PHP 7.4. Если вы получили такое предупреждение — вы не одни, это массовая миграция.
Как выглядит ошибка
Симптомы зависят от того, какая именно несовместимость и на каком уровне включены ошибки:
| Сценарий | Типичное проявление |
|---|---|
PHP 8.0+ с включённым WP_DEBUG |
Явная ошибка: Fatal error: Uncaught Error: Call to undefined function each() |
PHP 8.0+ с выключенным WP_DEBUG |
Белый экран смерти (WSOD) на странице плагина или всего сайта |
| PHP 8.1+ (deprecation warnings) | Предупреждение в админке: «Please update your PHP version» |
| После обновления PHP хостингом | Сайт внезапно перестаёт работать — до этого всё было нормально |
Пошаговое решение
Шаг 1. Определите, какой именно компонент вызывает ошибку
Включите режим отладки WordPress. Отредактируйте wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_DISPLAY', true);
define('WP_DEBUG_LOG', true);
После этого перезагрузите страницу, на которой возникает ошибка. Файл wp-content/debug.log покажет точное место:
[06-Jun-2026 12:00:00 UTC] PHP Fatal error: Uncaught Error: Call to undefined function each() in /wp-content/plugins/old-plugin/functions.php:15
Что важно: в строке ошибки указан путь к файлу — по нему вы сразу поймёте, какой плагин или какая тема проблемные.
Шаг 2. Обновите плагины и тему
Это самый простой и безопасный способ:
- В админке WordPress: Плагины → все, у кого есть уведомление об обновлении → Обновить.
- Внешний вид → Темы → обновить активную тему.
- Если обновлений нет — проверьте, поддерживается ли плагин автором. На странице плагина в репозитории WordPress смотрите раздел «Tested up to» — если там указано
6.xи дата меньше года назад, плагин жив.
Провал: обновления нет, плагин заброшен автором → переходите к Шагу 3.
Шаг 3. Замените или исправьте код вручную
Вариант A — найти альтернативу. В репозитории WordPress почти для каждого заброшенного плагина есть форк или аналог. Ищите по той же функциональности.
Вариант B — исправить код. Если хотите сохранить плагин, найдите в его коде устаревшие функции и замените на современные аналоги:
| Устаревшая функция | Замена в PHP 8.x |
|---|---|
mysql_connect() |
mysqli_connect() или wpdb |
each() |
foreach |
create_function() |
Анонимная функция (closure) |
implode( $array, $glue ) |
implode( $glue, $array ) |
Подробный справочник устаревших функций — в официальной документации PHP.
Вариант C — временный костыль: если нужно время на миграцию, можно подключить classicpress/php-compatibility через must-use плагин. Он перехватывает фатальные ошибки совместимости и показывает понятное сообщение вместо WSOD. Это не решение, а отсрочка — на 2–3 недели максимум.
Шаг 4. Проверьте hosting-окружение
Иногда проблема не в коде, а в настройках сервера:
- Директива
memory_limit— для WordPress рекомендуется 128M и выше. Проверьте через Инструменты → Здоровье сайта. - Версия PHP на хостинге — убедитесь, что вы используете не самую свежую «сырую» версию. Stable-ветки: 8.1, 8.2, 8.3. PHP 8.4 пока имеет ограниченную поддержку плагинов.
- OPcache — после смены версии PHP очистите кеш.
Шаг 5. Если всё ещё не работает — изолируйте проблему
Отключите все плагины (через FTP или файловый менеджер хостинга, переименовав папку wp-content/plugins). Если сайт заработал — включайте плагины по одному и тестируйте. Проблемный плагин найдёте на третьем-четвёртом шаге.
Профилактика
Чтобы не попадать в такую ситуацию в будущем:
- Подпишитесь на уведомления об обновлениях PHP от вашего хостинга. Обычно они предупреждают за 3–6 месяцев.
- Держите staging-копию сайта. Перед обновлением PHP на проде — протестируйте на стейджинге. Мы используем WP Staging — бесплатный плагин для создания копий.
- Удаляйте неиспользуемые плагины. Чем меньше кода, тем меньше поверхность для несовместимости.
- Выбирайте активно поддерживаемые плагины. На странице плагина в репозитории смотрите: частоту обновлений, количество активных установок и дату последнего тестирования.
Когда звать специалиста
Если после всех шагов сайт не работает, а бюджет на техподдержку есть — не геройствуйте. Восстановление сайта после неудачного обновления PHP может занять у неподготовленного человека целый день.
В студии Gurupractice мы регулярно:
— проводим аудит совместимости перед обновлением PHP;
— исправляем или заменяем устаревшие плагины;
— настраиваем staging-окружение для безопасного тестирования.
Дата публикации: 6 июня 2026 г.
Автор: Команда Gurupractice — студия поддержки и разработки сайтов на WordPress.
Источники:
1. PHP Manual — Appendices (список устаревших функций)
2. WordPress.org — Debugging in WordPress
3. W3Techs — Usage statistics of PHP
4. Make WordPress Core — PHP compatibility
