#Что происходит и как определить неисправность
После смены PHP 7 на PHP 8 часть плагинов WordPress может перестать работать из-за удалённых функций, несовместимых сигнатур методов, старых зависимостей или отсутствующих расширений. Безопасная стратегия — тестовая копия, точная фатальная ошибка и обновление конкретного компонента, а не массовое отключение защиты.
#Вероятные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Плагин использует удалённые элементы PHPПлагин использует удалённые элементы PHP. Fatal error указывает на устаревшую функцию/метод в файлах плагина | Fatal error указывает на устаревшую функцию/метод в файлах плагина | Проверить совместимую версию плагина, обновить на копии. |
| Изменились требования к типам и аргументамИзменились требования к типам и аргументам. TypeError/ValueError появляется после перехода PHP 8 | TypeError/ValueError появляется после перехода PHP 8 | Разобрать конкретный вызов и тесты совместимости. |
| Для новой версии PHP не включено расширениеДля новой версии PHP не включено расширение. Call to undefined function mysqli... либо отсутствует класс из расширения | Call to undefined function mysqli... либо отсутствует класс из расширения | Уточнить веб-версию PHP и включённые модули. |
#Пошаговая диагностика и исправление
- Сохраните состояние до переключения PHPСделайте резервную копию файлов WordPress и базы MySQL, запишите установленную версию PHP, версию WordPress и список активных плагинов. Если работает интернет-магазин, согласуйте время тестов; нельзя рисковать текущими заказами и платёжными операциями.
- Сверьте действительную версию веб-обработчикаВ панели сайта найдите конкретную версию PHP-FPM, на которой работает домен. Не полагайтесь на php -v по SSH: CLI может использовать другую версию. Запишите также доступные расширения, настройки OPcache и текущие ограничения памяти.
- Соберите одну точную ошибкуЕсли сайт показывает критическую ошибку, проверьте письмо режима восстановления. В панели хостинга откройте журнал PHP и найдите сообщение Fatal error, TypeError, ValueError, вызвавший файл и строку. Не копируйте в публичные отчёты пути с паролями и другие секреты.
- Определите проблемный компонент по файлуЕсли ошибка указывает на wp-content/plugins/имя-плагина, откройте официальный источник плагина и его поддержку. Сверьте совместимость именно с установленными WordPress и PHP. Если строка относится к ядру, сначала исключите вмешательство стороннего автозагрузчика/плагина.
- На копии временно отключите конкретный плагинВ WordPress откройте Плагины → Установленные → Деактивировать; если панель не работает, в файловом менеджере переименуйте только каталог проблемного плагина внутри wp-content/plugins. Проверяйте сайт и возвращайте название, если это не помогло.
- Проверяйте обновление плагина отдельноНа тестовой копии установите официальную версию, заявляющую совместимость с вашим PHP. Если автор прекратил поддержку, подберите поддерживаемую замену и проверьте миграцию её данных. Не исправляйте ядро WordPress или файлы вендора напрямую на рабочем сайте.
- Разберите отсутствующее расширениеВ панели PHP нужного домена проверьте наличие требуемого расширения (например, mysqli, mbstring, intl). При установке расширения учитывайте конкретную сборку PHP и не включайте модуль с другого интерпретатора. Перезапускать все PHP-пулы на сервере ради одного сайта не нужно.
- Проверьте ключевые пользовательские действияНа тестовой копии последовательно пройдите вход, редактор, отправку формы, загрузку файла, оплату в тестовом режиме и фоновые задания (по применимости). Просто открывшаяся главная не гарантирует совместимость с PHP 8.
- Публикуйте небольшими изменениями и держите откатПеренесите только протестированные версии и настройки в рабочее окружение; следите за журналом в первые обращения. Если возникли новые ошибки, верните пакет кода и настройки из согласованной копии, а переключение версии PHP выполняйте через хостинг с учётом других сайтов.
#Как проверить результат
На целевой PHP 8 проходят основные сценарии WordPress и тестовые операции плагинов, в журнале нет новых фатальных ошибок, временные отладочные настройки выключены.
#Если не помогло
Если устранён один плагин, но выявилась другая ошибка, повторяйте изоляцию по журналу. Не смешивайте исправление отсутствующего модуля с изменениями синтаксиса PHP: это разные проблемы.