Как обновить PHP на WordPress и не уронить сайт: наш кейс

Обновить PHP на WordPress — это одна кнопка в панели хостинга, но после неё сайт может отдавать ошибку 500, если какой-то плагин написан под старую версию. Так вышло и у нас: при переходе этого сайта с PHP 7.4 на 8.2 он пять минут лежал из-за трёх заброшенных плагинов. Ниже — какая версия PHP нужна WordPress, как её узнать, что именно ломается, как проверить плагины до переключения и что делать, если сайт всё-таки упал.

Обновить PHP на WordPress: ошибки из лога и исправление create_function
Что уронило сайт при переходе на PHP 8.2 и как это исправили

Какая версия PHP нужна WordPress

На странице требований WordPress рекомендуется PHP 8.3 или новее. Работать WordPress может и на PHP 7.4, но эти версии, как там же сказано, больше не поддерживаются и могут сделать сайт уязвимым. Какие версии PHP поддерживает каждая версия WordPress, видно в таблице совместимости:

Версия WordPressПоддерживаемые версии PHPМинимум
7.1 и 7.07.4, 8.0–8.57.4
6.97.2–7.4, 8.0–8.57.2

Смотреть стоит и на срок поддержки самого PHP. По данным php.net, сейчас поддерживаются ветки 8.2–8.5, причём 8.2 получает только исправления безопасности и до 31 декабря 2026 года. Версии 7.4, 8.0 и 8.1 уже не поддерживаются вовсе. Поэтому переходить лучше сразу на 8.3 или 8.4, если плагины это позволяют. Мы перешли на 8.2 — и в ближайшие месяцы нас ждёт следующий шаг.

Как узнать версию PHP на сайте WordPress

Проще всего в самом WordPress: Инструменты → Здоровье сайта → Информация → Сервер, строка «Версия PHP». Если версия устарела, WordPress сам предупредит об этом на вкладке «Состояние».

Версия PHP в разделе Здоровье сайта WordPress
Раздел «Сервер» в «Здоровье сайта» на нашем тестовом WordPress

Версия также видна в панели хостинга, в настройках сайта. Если есть SSH, команда php -v покажет версию, которая работает в консоли, — но она может отличаться от версии, на которой работает сайт.

Что ломается при переходе на PHP 8

В PHP 8.0 убрали несколько старых возможностей, которые годами работали с предупреждениями. По списку несовместимых изменений на php.net, чаще всего в старых плагинах встречаются три:

  • create_function() — удалена, вместо неё анонимные функции function () { ... };
  • each() — удалена, вместо неё foreach;
  • доступ к символу строки через фигурные скобки $s{0} — больше не поддерживается, только $s[0].

Любое из этого в активном плагине или теме даёт фатальную ошибку, то есть ошибку 500 или сообщение о критической ошибке. Ядро WordPress и живые плагины давно переписаны; проблема почти всегда в плагинах, которые годами не обновлялись.

Наш кейс: 5 минут ошибки 500

Этот сайт много лет работал на PHP 7.4. Перед переходом мы обновили ядро WordPress до 7.1.2 — этого требовал Yoast — и все плагины. Затем переключили PHP на 8.2 в панели хостинга. Сайт сразу начал отдавать 500, а в логе появились две ошибки:

PHP Fatal error:  Uncaught Error: Call to undefined function create_function()
PHP Fatal error:  Array and string offset access syntax with curly braces is no longer supported in plugins/wordpress-23-related-posts-plugin/lib/stemmer.php on line 388

Виноватыми оказались три плагина, которые давно никто не обновлял:

ПлагинЧто сломалось
wordpress-23-related-posts-plugin (похожие записи)create_function в двух файлах и $s{0} в lib/stemmer.php
wp-russian-typograph (типограф)create_function внутри preg_replace_callback
wp-media-cleanercreate_function в настройках

Сначала мы подняли сайт быстрой правкой прямо в файлах плагинов:

// было
create_function('$p', 'return $p->ID;')
// стало
function ($p) { return $p->ID; }

// было
$s{0}
// стало
$s[0]

Сайт ожил. Но латать чужой заброшенный код — временная мера, поэтому следующим шагом все три плагина мы удалили: типографику и похожие записи закрывают тема и Yoast, а Media Cleaner был не нужен. Оригиналы файлов сохранили на случай, если что-то понадобится вернуть.

Как проверить плагины до обновления PHP

Эти пять минут простоя можно было не допустить. Мы воспроизвели ошибки на тестовых файлах, чтобы проверить, какие способы их находят, — и выяснили важную вещь.

Проверка синтаксиса новой версией PHP. Команда php -l проверяет файл без запуска. Запускаем её от PHP 8.2 для трёх файлов: со старыми скобками, с create_function и уже исправленного:

php -l plugin/stemmer.php
php -l plugin/init.php
php -l plugin/fixed.php
Fatal error: Array and string offset access syntax with curly braces is no longer supported in plugin/stemmer.php on line 3
Errors parsing plugin/stemmer.php
No syntax errors detected in plugin/init.php
No syntax errors detected in plugin/fixed.php

Скобки php -l поймал, а create_function — нет: синтаксически вызов несуществующей функции корректен, ошибка возникает только при выполнении. А PHP 7.4 не видит проблем ни в одном из файлов. Поэтому php -l нужно запускать именно новой версией PHP и дополнять поиском удалённых функций:

grep -rnE 'create_function|each\(|\$[a-zA-Z_]+\{' wp-content/plugins wp-content/themes
plugin/init.php:2:$ids = array_map(create_function('$p', 'return $p->ID;'), $posts);
plugin/stemmer.php:3:    return $s{0};

Выше — вывод на наших тестовых файлах. На реальном сайте поиск выдаст и ложные срабатывания: each( найдётся внутри foreach( и в названиях методов вроде $items->each(. Смотрите глазами строки, которые нашлись.

Где запустить нужную версию PHP. На VPS — в Docker, не трогая систему: docker run --rm -v "$PWD":/app -w /app php:8.2-cli php -l файл.php. На хостинге Timeweb по документации в SSH-консоли доступны разные версии PHP по пути /opt/phpXX/bin/php, например /opt/php82/bin/php -l файл.php.

Проверить все PHP-файлы плагинов и темы разом:

find wp-content/plugins wp-content/themes -name '*.php' -exec php -l {} \; | grep -v '^No syntax errors'

Как обновить версию PHP в WordPress: порядок

  1. Сделайте резервную копию файлов и базы — как, в статье резервная копия сайта.
  2. Обновите ядро WordPress, тему и плагины. Плагины, у которых нет обновлений несколько лет, — первые кандидаты на удаление или замену.
  3. Проверьте код новой версией PHP: php -l и поиск удалённых функций, как выше.
  4. Подготовьте запасной вход. Если админка не откроется, отключить плагин можно, переименовав его папку в wp-content/plugins через FTP, SFTP или файловый менеджер хостинга. Проверьте доступ заранее.
  5. Переключайте в тихие часы, когда посетителей меньше всего.
  6. Смените версию в панели хостинга. У Timeweb это Сайты → Мои сайты → значок шестерёнки у сайта → «Настроить» в блоке «Настройки версии и кодировки» → нужная версия → сохранить. Если нужной версии нет, Timeweb предлагает написать в поддержку для переноса на другой сервер. В других панелях пункт обычно тоже в настройках сайта.
  7. Сразу проверьте сайт: главную, пару записей, админку, формы. Откройте лог ошибок.

Если сайт упал после обновления PHP

  • Самое быстрое — вернуть прежнюю версию PHP в той же панели, а разбираться уже спокойно.
  • Найдите виновника в логе. В строке фатальной ошибки указан путь к файлу, а значит и плагин. Как читать лог и включить debug.log в WordPress — в статье ошибка 500 и 502.
  • Отключите плагин, переименовав его папку, и проверьте сайт.
  • Замените или удалите плагин, а не только правьте его: следующая версия PHP может сломать его снова.

Обновление 29.09.2026: поддержка PHP 8.2 заканчивается 31 декабря 2026 года — подробности в новости об обновлениях PHP 24 сентября.

Источники: требования WordPress, совместимость WordPress и PHP, поддерживаемые версии PHP, несовместимые изменения PHP 8.0, смена версии PHP на Timeweb. Проверено 26 сентября 2026 года.

4 / 1
Оцените статью
Да будет Интернет!