WordPress: ошибки в NextGEN-галереях

На работающем wordpress-сайте вдруг сломались галереи NextGEN, который стал выдавать вместо нормальной вёрстки ошибку:

Включенный в wp-config.php режим отладки (WP_DEBUG=true) показал стопку уведомлений (ошибки php уровня E_NOTICE) на странице настроек плагина в админке.

Сама форма выглядела сломанной, отсутствовали заголовки разделов и все настройки были сброшены. При попытке заполнить и сохранить поля получал белый экран с ошибкой save() on null.

Надо сказать, что несколько дней до этого у моего хостера был аврал, связанный со взломом каких-то сайтов, как объяснила мне техподдержка. Сайты лагали и долго отдавали даже статические файлы. Не связав этот факт с моей проблемой (зря), я несколько часов потрошил исходники и копался в базе данных (первоначально ошибка и её описания в интернете выглядели как баг синхронизации версии плагина с БД), пока суть проблемы не прояснилась: настройки хостинга запрещали использование функций PHP base64_encode/base64_decode.

Решение

Способ 1

Если галерея выдаёт одну из ошибок выше, она могла сломаться не только из-за настроек безопасности хостинга. В этом случае работают способы:

  • (предварительный бэкап базы, отдельных таблиц NextGen) → деактивация/удаление плагина → установка заново.
  • Если использовались шорткоды для вставки галерей в записи, то попробовать удалить из них кавычки.

Способ 2

Если ошибка всё-таки в запрете необходимых для работы функций, то самый правильный способ — начать переписку с хостером и выяснить причины запрета.

Указанные функции используются не только в сторонних плагинах, но и в ядре WordPress:

Способ 3

Экстремальный метод: заменить во всех файлах вызовы нативных функций PHP на пользовательскую реализацию алгоритма.

Реализация нужных функций на PHP (файл base64-fix.inc.php):

Добавить загрузку этого файла в движок WordPress (файл wp-load.php):

Очевидно, что прибегать к подобному решению стоит только в крайнем случае: после каждого обновления движка и плагинов придётся редактировать файлы заново, к тому же возможны побочные эффекты. К примеру, на конфигурации моего сайта плагин autoptimise начал выдавать странные нечитаемые символы в оптимизированные версии страниц, из-за чего ломалась вёрстка, его пришлось отключить. За исключением этого момента, сайт работал стабильно в течении 12 часов, пока на следующий день, когда я уже собирался писать тикет хостеру, нужные функции не были включены обратно. Тогда я вернул все заранее сохранённые файлы назад, и сделал новые бэкапы стабильной версии.

Ссылки