My Popup не открывается в админке после обновления страницы: как найти причину и исправить
Когда My Popup открывается один раз, а после обновления страницы в админке перестаёт реагировать, проблема обычно не в самом окне. Чаще ломается загрузка скриптов, сбрасывается состояние интерфейса, мешает кэш браузера или конфликтует другой плагин, который перехватывает события в редакторе или в панели управления.
Ниже — рабочий порядок проверки: от быстрой диагностики до точечной правки кода. Если вы поддерживаете сайт на WordPress с кастомными плагинами, этот сценарий лучше отлавливать сразу, пока проблема не превратилась в «то работает, то нет».
Как выглядит проблема на практике
Типичный сценарий такой: вы заходите в админку, открываете настройки My Popup, всё отображается нормально. После обновления страницы кнопка открытия не срабатывает, модальное окно не появляется или появляется пустой контейнер без контента. Иногда интерфейс открывается только после принудительного обновления с очисткой кэша.
Если проблема проявляется только в админке, а на фронтенде всё стабильно, сначала смотрите именно на:
- ошибки JavaScript в консоли;
- конфликт с другими скриптами в
wp-admin; - неполную загрузку файлов плагина;
- кэширование админки на уровне браузера или прокси;
- права пользователя и доступ к AJAX-обработчикам.
Диагностика: что проверить первым делом
1. Консоль браузера
Откройте инструменты разработчика и посмотрите вкладку Console. Для админки WordPress это самый быстрый способ понять, почему интерфейс не оживает после перезагрузки. Ищите ошибки вида Uncaught TypeError, jQuery is not defined, Cannot read properties of undefined или 403/404 на загрузке файлов.
2. Сетевые запросы
Во вкладке Network проверьте, грузятся ли скрипты и стили My Popup после обновления страницы. Если файл отдаётся с 404, проблема в подключении. Если запрос к admin-ajax.php возвращает 0, 403 или HTML вместо ожидаемого ответа, значит ломается серверная часть или права доступа.
3. Конфликт плагинов
Часто виноваты плагины, которые меняют поведение админки: минификация, оптимизация JS, защита входа, редиректы, кастомные редакторы. Для проверки временно отключите всё, кроме My Popup, и повторите сценарий. Если после этого окно открывается стабильно, конфликт найден.
4. Кэш и минификация
Если на сайте включены плагины оптимизации, убедитесь, что они не объединяют и не откладывают скрипты в wp-admin. Админка WordPress — не то место, где стоит агрессивно минифицировать и откладывать загрузку JS. Даже если плагин умеет это делать, для панели управления лучше исключить её из оптимизации.
Пошаговое решение
Шаг 1. Исключите админку из оптимизации
Если у вас есть плагин кэширования или оптимизации, проверьте настройки исключений. В большинстве случаев нужно отключить минификацию, объединение и отложенную загрузку скриптов для /wp-admin/ и admin-ajax.php. Это не «косметика», а базовое условие для стабильной работы интерфейса.
Если плагин позволяет задавать исключения по путям, добавьте:
/wp-admin/
/wp-login.php
/admin-ajax.phpШаг 2. Проверьте подключение скриптов My Popup
Если вы добавляли кастомный код в тему или мини-плагин, убедитесь, что скрипты подключаются через стандартные функции WordPress и только там, где это нужно. Для админки используйте admin_enqueue_scripts, а не фронтенд-хуки.
<?php
add_action('admin_enqueue_scripts', function ($hook) {
if ($hook !== 'settings_page_my-popup') {
return;
}
wp_enqueue_script(
'my-popup-admin-fix',
get_stylesheet_directory_uri() . '/assets/js/my-popup-admin-fix.js',
array('jquery'),
'1.0.0',
true
);
wp_localize_script('my-popup-admin-fix', 'MyPopupAdmin', array(
'ajaxUrl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('my_popup_admin_nonce'),
));
});Если скрипт подключается на всех страницах админки без фильтрации, он может конфликтовать с другими экранами и ломать повторное открытие окна после обновления.
Шаг 3. Проверьте AJAX-обработчик
Если My Popup открывается через AJAX, убедитесь, что сервер возвращает корректный ответ и nonce не протухает. Для админки это особенно важно: после обновления страницы старое состояние интерфейса может ссылаться на устаревший токен.
<?php
add_action('wp_ajax_my_popup_load_settings', function () {
check_ajax_referer('my_popup_admin_nonce', 'nonce');
if (!current_user_can('manage_options')) {
wp_send_json_error(array('message' => 'Недостаточно прав'), 403);
}
wp_send_json_success(array(
'html' => '<p>Настройки загружены</p>',
));
});Если в ответе приходит ошибка nonce, обновите токен при рендере страницы и не храните его в статическом JS-файле.
Шаг 4. Сбросьте кэш браузера и проверьте инкогнито
Иногда проблема не в WordPress, а в локальном кэше браузера. Проверьте страницу в режиме инкогнито и в другом браузере. Если там всё работает, значит нужно чистить кэш, отключать расширения или смотреть на Service Worker, если он есть в проекте.
Как проверить, что исправление сработало
После внесения правок не ограничивайтесь одним кликом по кнопке. Пройдите короткий чек-лист:
- обновите страницу в админке без принудительной очистки кэша;
- откройте My Popup несколько раз подряд;
- проверьте Console на отсутствие новых ошибок;
- убедитесь, что AJAX-запросы возвращают
200и корректный JSON; - перейдите на другой экран админки и вернитесь обратно;
- проверьте работу под пользователем с ролью администратора и, если нужно, под редактором.
Если окно открывается только после второго обновления, это почти всегда признак того, что скрипт инициализируется раньше, чем готов DOM, либо часть зависимостей подгружается асинхронно и не успевает к моменту вызова.
Сравнение подходов: плагин, точечный код или отключение конфликта
| Подход | Когда подходит | Минус |
|---|---|---|
| Настроить исключения в кэше | Если проблема после обновления связана с минификацией или отложенной загрузкой | Нужно проверить несколько настроек, а не одну |
| Исправить подключение скриптов | Если My Popup ломается из-за кастомного кода или темы | Требует доступа к коду и тестирования |
| Отключить конфликтующий плагин | Если ошибка появляется только при активном конкретном расширении | Иногда приходится искать виновника перебором |
Частые ошибки и как их исправить
Скрипт подключён на всех страницах админки
Это создаёт лишнюю нагрузку и повышает шанс конфликта. Ограничьте загрузку конкретным экраном через параметр $hook или проверку get_current_screen().
Nonce не обновляется после перезагрузки
Если токен создаётся один раз и хранится в JS без перерендера, после обновления страницы AJAX начнёт падать. Генерируйте nonce на сервере при каждой загрузке экрана.
Кэшируется админка
Админка не должна попадать под агрессивное кэширование. Если у вас есть reverse proxy, CDN или плагин оптимизации, исключите административные URL.
Конфликт с jQuery-скриптами
Иногда другой плагин переопределяет $ или запускает код до готовности DOM. Используйте обёртку jQuery(function($) { ... }) и не полагайтесь на глобальный $.
Практические советы по безопасности и производительности
Если вы правите проблему через код, не делайте это в теме, если логика относится к плагину. Лучше вынести исправление в небольшой mu-plugin или отдельный мини-плагин. Тогда обновление темы не сотрёт правку.
Для админки полезно придерживаться двух правил:
- не подключать тяжёлые библиотеки без необходимости;
- не хранить чувствительные данные в открытом JS;
- проверять права через
current_user_can()перед AJAX-ответом; - не отключать проверки nonce «ради удобства».
Если проблема связана не с My Popup, а с общей чисткой сайта и дублями в админке, иногда помогает отдельная оптимизация через Clearfy Pro: он полезен для технической гигиены WordPress, но его всё равно нужно настраивать аккуратно и с исключениями для админки. Подробности можно посмотреть на странице плагина.
Если после всех проверок My Popup всё ещё не открывается после обновления страницы, снимите минимальный набор данных для диагностики: текст ошибки из Console, список активных плагинов, URL экрана админки и факт, воспроизводится ли проблема в чистом профиле браузера. С такими данными причину обычно можно найти быстро, без гадания по симптомам.