WordPress 6.4 и Oxygen: почему сайты падали с fatal error и как это исправили

8 ноября 2023 года Search Engine Journal написал, что после обновления до WordPress 6.4 «Shirley» часть сайтов перестала открываться с фатальной ошибкой PHP. Общим у всех пострадавших оказался конструктор страниц Oxygen. История давняя, но поучительная: сломалось не ядро само по себе, а связка ядра, плагина и стандартных тем, которые вообще лежали без дела.

Что ломалось после обновления до 6.4

Первые жалобы появились в закрытой группе Dynamic WordPress в Facebook почти сразу после релиза. Сценарий повторялся: сайт на Oxygen после обновления ядра отдавал fatal error и белый экран. Разработчица Бренда Мэлоун обратила внимание на деталь: падали сайты, где в wp-content/themes лежали старые стандартные темы вроде Twenty Twenty-One и Twenty Twenty-Two. Тема могла быть неактивной, ей хватало просто быть на диске.

В трекере ошибок Oxygen на GitHub причину разобрали подробнее. При включённом Oxygen функция get_template_directory() возвращала строку fake вместо пути к теме. Файл functions.php стандартной темы пытался подключить свои файлы из несуществующего каталога и ронял PHP. Откат ядра на 6.3.2 проблему снимал, а WordPress 6.4.1 её не исправил: чинить нужно было сам плагин.

Как поднимали сайты

Пока не было исправления, сайты возвращали несколькими способами:

  • удалить старые стандартные темы Twenty* из wp-content/themes: у многих сайт сразу оживал;
  • войти через режим восстановления WordPress (recovery mode), убрать устаревшие темы и поставить свежую Twenty Twenty-Four, так советовали в официальной группе Oxygen;
  • переключить тему через WP-CLI, не загружая плагины;
  • если SSH нет, переименовать по FTP папку Oxygen в wp-content/plugins, зайти в админку, сменить тему и вернуть имя папки.

Вариант с WP-CLI из того же обсуждения на GitHub. Команду запускают из корня сайта, ключ --skip-plugins не даёт Oxygen загрузиться:

wp theme activate twentytwentyfour --skip-plugins

Чем закончилось: Oxygen 4.7.1

Разработчики Oxygen быстро выпустили версию 4.7.1, которая исправила ошибку с WordPress 6.4. В своей группе они попросили обновить Oxygen на всех сайтах до обновления ядра. Задачу на GitHub закрыли 9 ноября 2023 года с пометкой, что исправление вошло в 4.7.1.

С тех пор много воды утекло. Актуальный WordPress сейчас 7.1.3, а Oxygen давно перешёл на ветку 6, переписанную заново на общем движке с Breakdance. Если у вас до сих пор старый Oxygen 4.x, это повод обновить его или запланировать переезд: на свежих версиях ядра старые сборки плагина никто не тестирует.

Что из этой истории стоит взять себе

  • Перед обновлением ядра обновить конструктор страниц и крупные плагины: их разработчики обычно выпускают совместимые версии к релизу.
  • Не держать в wp-content/themes пачку неиспользуемых тем. Оставить активную, её родительскую и одну свежую стандартную на случай аварии.
  • Сначала обновлять копию сайта или хотя бы иметь свежий бэкап файлов и базы.
  • Знать, как войти в режим восстановления и как сменить тему через WP-CLI с --skip-plugins: это два самых быстрых способа поднять упавший сайт.

В итоге сбой WordPress 6.4 на сайтах с Oxygen вызвала ошибка в самом плагине, а старые стандартные темы только её проявляли. Её закрыл Oxygen 4.7.1, а главный вывод остался прежним: обновлять конструктор раньше ядра, не копить лишние темы и держать бэкап под рукой.

Источники и ссылки


Комментарии загружаются…