My Popup не сохраняет изменения в админке после перехода на PHP 8: как найти причину и исправить
Если после перехода сайта на PHP 8 настройки My Popup открываются, но не сохраняются, проблема обычно не в самом интерфейсе плагина. Чаще всего ломается один из трёх слоёв: AJAX-запрос в админке, ошибка PHP на сервере или конфликт с другим плагином, который вмешивается в сохранение опций.
Ниже — рабочий порядок проверки. Он подходит для случаев, когда кнопка сохранения нажимается, но после обновления страницы значения откатываются, часть полей пустеет или в консоли появляются ошибки.
Как выглядит проблема на практике
Сценарий обычно такой: вы меняете текст, условия показа, cookie-настройки или внешний вид popup, нажимаете «Сохранить», а затем видите старые значения. Иногда часть полей сохраняется, а часть — нет. Это важная деталь: если не сохраняется только один тип поля, искать нужно не в общей конфигурации WordPress, а в конкретной обработке формы или в JavaScript на странице настроек.
Что проверить первым делом
- Открывается ли страница настроек My Popup без белого экрана и 500-й ошибки.
- Есть ли ошибки в консоли браузера на вкладке
Console. - Проходит ли AJAX-запрос сохранения на вкладке
Network. - Не отключён ли
wp-admin/admin-ajax.phpправилами безопасности, WAF или модулем кэширования. - Не включён ли режим совместимости, который режет inline-скрипты или nonce.
Диагностика: где именно ломается сохранение
Начинайте не с переустановки плагина, а с фиксации точки отказа. Это экономит время и сразу показывает, нужен ли разработчик темы, администратор сервера или достаточно отключить конфликтующий плагин.
1. Проверка ошибок PHP
Если на сервере включён PHP 8, старый код в теме или в одном из плагинов может генерировать предупреждения и фатальные ошибки. Иногда они не видны на экране, но ломают ответ AJAX-запроса. Включите логирование на время проверки и повторите сохранение настроек.
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);После этого откройте файл wp-content/debug.log и найдите ошибки в момент нажатия кнопки сохранения. Если там есть сообщения про deprecated, fatal error или несовместимость с PHP 8, сначала исправляйте их, а уже потом проверяйте My Popup.
2. Проверка AJAX-запроса
Откройте инструменты разработчика, вкладку Network, сохраните настройки ещё раз и найдите запрос к admin-ajax.php или похожий endpoint, который использует плагин. Важны три вещи: код ответа, тело ответа и нет ли в нём HTML-ошибки вместо JSON.
Если вместо ожидаемого JSON приходит страница с предупреждением PHP или редирект на страницу логина, значит проблема не в форме, а в серверной обработке запроса.
3. Проверка прав и nonce
Если сохранение работает у администратора, но не работает у редактора или другого пользователя, проверьте права роли. Для настроек плагина часто нужен доступ уровня manage_options или эквивалентная capability, которую задаёт сам плагин. Также не исключайте истёкший nonce: если страница настроек долго открыта, а потом отправляется старая форма, WordPress может отклонить запрос.
Пошаговое решение без лишних рисков
Ниже порядок, который обычно быстрее всего приводит к причине.
Шаг 1. Отключите всё лишнее на время теста
Не на боевом сайте, а на staging-копии отключите плагины, которые вмешиваются в админку: оптимизаторы, security-плагины, минификаторы, плагины для перевода интерфейса, кастомные поля и всё, что подменяет загрузку скриптов. После этого проверьте сохранение My Popup ещё раз.
Если проблема исчезла, включайте плагины по одному. Так вы быстро найдёте конфликт.
Шаг 2. Сравните поведение на стандартной теме
Даже если проблема проявляется в админке, а не на фронтенде, тема тоже может вмешиваться: через admin scripts, кастомные хуки или переопределение jQuery. Переключение на стандартную тему помогает исключить этот слой.
Шаг 3. Проверьте, не режет ли сервер AJAX
На некоторых хостингах правила ModSecurity, антивирусные фильтры или WAF блокируют запросы с определёнными параметрами. Если в ответе на сохранение видите 403, 406 или странный редирект, попросите хостинг проверить логи защиты именно в момент отправки формы.
Шаг 4. Обновите My Popup и зависимые библиотеки
Если плагин давно не обновлялся, а сайт уже на PHP 8, проблема может быть в несовместимом коде. Обновите сам My Popup, WordPress и все плагины, которые работают с админкой. После обновления повторите тест на чистом окружении.
Пример проверки через минимальный тестовый код
Если нужно быстро понять, доходит ли запрос до WordPress и не ломается ли сохранение на уровне capability, можно временно добавить небольшой mu-plugin для логирования AJAX-запросов. Это не решение для продакшена, а диагностический инструмент.
<?php
/**
* Plugin Name: AJAX Save Logger
*/
add_action('admin_init', function () {
if (defined('DOING_AJAX') && DOING_AJAX) {
error_log('AJAX request: ' . ($_REQUEST['action'] ?? 'no-action'));
}
});Если в логах нет следа от нажатия кнопки сохранения, значит запрос не уходит из браузера или блокируется до WordPress. Если след есть, но ответ ошибочный, копайте глубже в PHP-логи и обработчик плагина.
Как проверить, что исправление сработало
После каждого изменения делайте не один, а три коротких теста: обычное сохранение, сохранение с заполненными обязательными полями и сохранение после перезагрузки страницы. Это позволяет поймать проблему с nonce, кэшем админки или нестабильным AJAX.
- Откройте страницу настроек My Popup в новой вкладке.
- Измените одно текстовое поле и одно переключаемое значение.
- Сохраните настройки и сразу обновите страницу.
- Проверьте, что значения остались прежними после reload.
- Откройте
debug.logи убедитесь, что новых ошибок нет.
Если сохранение прошло, но после очистки кэша админки проблема вернулась, значит конфликт связан не с самим плагином, а с оптимизацией админки или с внешним модулем, который вмешивается в nonce и скрипты.
Частые ошибки и как их исправить
Ошибка: включён кэш для админки
Админка WordPress не должна обслуживаться как обычная статическая страница. Если кэш-плагин или серверный кэш затрагивает /wp-admin/, формы могут отправляться с устаревшими nonce и настройка не сохранится. Исключите админку из кэширования полностью.
Ошибка: минификация ломает скрипт сохранения
Скрипт может зависеть от порядка загрузки jQuery и собственных файлов My Popup. После агрессивной минификации один из обработчиков не инициализируется, и кнопка сохранения визуально работает, но запрос не отправляется. На время проверки отключите объединение и отложенную загрузку JS.
Ошибка: конфликт с security-плагином
Плагины безопасности иногда блокируют запросы с nonce, нестандартными параметрами или подозрительными заголовками. Если после отключения security-плагина сохранение начинает работать, настройте исключение для админских AJAX-запросов, а не держите защиту выключенной.
Ошибка: старая версия PHP или несовместимый код в теме
На PHP 8 чаще всплывают проблемы, которые раньше были скрыты. Если в теме есть устаревшие вызовы, они могут ломать ответ AJAX. Исправляйте предупреждения в логах, а не маскируйте их отключением ошибок.
Что делать, если проблема только на одном сайте
Если My Popup сохраняется на локальной копии или staging, но не сохраняется на продакшене, почти всегда виноваты окружение или настройки хостинга. Смотрите:
| Вариант | Что проверить | Компромисс |
|---|---|---|
| Плагин | Конфликт с кэшем, security, переводом, редактором | Нужно тестировать по одному |
| Код в теме | Кастомные admin hooks, старый PHP-код | Требует доступа к теме и ревью кода |
| Сервер | WAF, ModSecurity, ограничения на AJAX | Зависит от поддержки хостинга |
Если нужен более предсказуемый набор инструментов для очистки сайта и контроля дублей, иногда проще сначала привести в порядок техническую базу, а уже потом настраивать popup-логику. В таких случаях полезно смотреть на связку с Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wppopup.ru&utm_medium=article&utm_campaign=my-popup-ne-sokhranyaet-izmeneniya-v-adminke-posle-perekhoda-na-php-8
Практические советы по безопасности и производительности
Не оставляйте включённым режим отладки на боевом сайте дольше, чем нужно для диагностики. Логи могут содержать служебные данные и пути к файлам. После проверки верните WP_DEBUG в исходное состояние.
Если вы нашли конфликт, не лечите его отключением всех защитных механизмов. Лучше точечно исключить только тот endpoint, который нужен My Popup, и оставить остальную защиту активной. Это особенно важно, если сайт работает на публичной админке и принимает много входящих запросов.
И ещё один практический момент: после обновления PHP всегда проверяйте не только фронтенд, но и админские формы. Именно там старый код чаще всего проявляется первым, потому что в админке больше AJAX, nonce и зависимостей от скриптов.