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, а главный вывод остался прежним: обновлять конструктор раньше ядра, не копить лишние темы и держать бэкап под рукой.