WPPopup

My Popup не сохраняет настройки после обновления страницы: как найти причину и исправить

Если попап в My Popup закрывается, но после обновления страницы снова появляется как новый, проблема обычно не в самом окне, а в том, что браузер не может сохранить состояние. На практике это почти всегда один из трёх сценариев: не записалась cookie, кэш отдал старую версию страницы, либо скрипт попапа не успел выполниться из-за конфликта с оптимизацией.

Ниже — рабочий порядок проверки: от быстрой диагностики до исправления на уровне темы, плагинов и конфигурации кэша.

Как понять, где ломается сохранение состояния

Сначала нужно отделить проблему плагина от проблемы окружения. Если попап не запоминает закрытие только на части страниц, чаще виноват кэш или разные шаблоны. Если не запоминает вообще нигде — смотрим cookie, JS и блокировку сторонних данных.

Что проверить в браузере

  • Откройте страницу в режиме инкогнито и закройте попап.
  • Обновите страницу и посмотрите, повторяется ли показ.
  • Откройте DevTools → Application → Cookies и проверьте, появилась ли cookie, связанная с попапом.
  • Во вкладке Console посмотрите, нет ли ошибок JavaScript до инициализации My Popup.

Если cookie не появляется вообще, значит скрипт не записывает состояние. Если cookie есть, но попап всё равно показывается, проблема уже в логике чтения cookie или в том, что страница отдается из кэша с устаревшими условиями.

Что проверить на стороне сайта

  • Есть ли кэширующий плагин или серверный кэш.
  • Не включена ли агрессивная минификация и объединение JS.
  • Не подключается ли один и тот же скрипт дважды через тему и плагин.
  • Не ломает ли поведение оптимизатор, который откладывает выполнение JavaScript.

Почему My Popup перестаёт запоминать закрытие

У подобных проблем обычно не одна причина. Важно не лечить симптом, а понять, где именно теряется состояние.

ВариантЧто происходитЧто делать
Cookie не записываетсяБраузер не получает маркер закрытияПроверить JS-ошибки, блокировку cookie и порядок загрузки скриптов
Кэш отдаёт старую страницуПользователь видит HTML до записи состоянияИсключить страницу из кэша или настроить вариации по cookie
Оптимизация JS ломает инициализациюСкрипт попапа запускается слишком поздно или не запускаетсяИсключить My Popup из отложенной загрузки и объединения

Пошаговое решение

1. Убедитесь, что cookie вообще создаётся

Самый быстрый тест — вручную закрыть попап и посмотреть, появилась ли cookie в браузере. Если у вас есть доступ к консоли, можно проверить список cookie на домене:

document.cookie

Это не покажет HttpOnly-cookie, но для попапов обычно используется обычная cookie. Если после закрытия ничего не меняется, ищите проблему в скриптах или в том, как My Popup подключён на странице.

2. Исключите конфликт с кэшем

Если на сайте стоит кэширование, страница может отдаваться одинаковой для всех посетителей, даже если попап уже должен быть скрыт. В таком случае нужно либо исключить страницу из кэша, либо настроить кэш так, чтобы он учитывал состояние cookie.

Для проверки временно отключите кэш на тестовой странице и повторите сценарий: открыть попап, закрыть, обновить. Если проблема исчезла, значит дело не в My Popup, а в кэше или его правилах исключения.

3. Проверьте, не ломает ли оптимизация JavaScript

Плагины ускорения часто откладывают выполнение скриптов, объединяют их или переносят в футер. Для попапов это опасно: если код инициализации сработает позже, чем пользователь покинет страницу, состояние может не записаться.

Если используете оптимизацию, добавьте скрипт My Popup в исключения от:

  • defer/async-отложенной загрузки;
  • объединения JS;
  • lazy load для скриптов;
  • минификации, если после неё появляется ошибка в консоли.

4. Проверьте, не блокируют ли cookie политика браузера и настройки сайта

Если попап встроен в сторонний домен, iframe или страницу с жёсткой политикой приватности, cookie могут не сохраняться. Также проблемы возникают, если сайт работает в смешанном режиме HTTP/HTTPS или если cookie выставляются с некорректным path/domain.

Для собственного сайта это обычно решается настройкой одного домена, корректного SSL и отсутствием лишних редиректов между версиями URL.

Пример проверки cookie и логики показа

Если вы подключаете свой код рядом с My Popup, полезно проверить, не перезаписываете ли вы состояние сами. Например, вот простой пример, который показывает, как можно хранить флаг закрытия в localStorage для собственной логики. Это не замена My Popup, а способ отладить поведение на стороне темы или кастомного скрипта.

document.addEventListener('DOMContentLoaded', function () {
  var key = 'my_popup_closed';

  if (localStorage.getItem(key) === '1') {
    var popup = document.querySelector('.my-popup');
    if (popup) {
      popup.style.display = 'none';
    }
  }

  var closeButton = document.querySelector('.my-popup__close');
  if (closeButton) {
    closeButton.addEventListener('click', function () {
      localStorage.setItem(key, '1');
    });
  }
});

Если такой код работает, а My Popup — нет, значит проблема в его подключении, кэше или конфликте с другими скриптами. Если не работает и этот вариант, ищите общую проблему в JS на странице.

Как исправить конфликт через functions.php

Иногда нужно точечно отключить оптимизацию для страницы с попапом или для конкретного скрипта. В WordPress это безопаснее делать через дочернюю тему или мини-плагин, а не правкой ядра темы.

add_action('wp_enqueue_scripts', function () {
    if (is_page('landing')) {
        // Пример: отключаем скрипт оптимизации, если он зарегистрирован в теме или плагине.
        // wp_dequeue_script('optimizer-script-handle');
        // wp_deregister_script('optimizer-script-handle');
    }
}, 100);

Здесь важно не выдумывать handle наугад. Сначала посмотрите реальное имя скрипта в исходном коде страницы или через список enqueued scripts в отладке. Иначе код ничего не даст.

Проверка результата после исправления

После изменений не ограничивайтесь одним обновлением страницы. Проверьте сценарий целиком:

  1. Откройте страницу в приватном окне.
  2. Покажите попап и закройте его.
  3. Обновите страницу.
  4. Перейдите на другую страницу сайта и вернитесь обратно.
  5. Очистите cookie только для домена и повторите тест.

Если попап не появляется после обновления, но снова показывается после очистки cookie, значит логика сохранения работает. Если он продолжает открываться, смотрите кэш и JS-ошибки.

Частые ошибки и как их исправить

  • Проверяют только в админке. В админке часто другой набор скриптов и кэш не работает так же, как на фронтенде. Тестируйте на публичной странице.
  • Отключают кэш полностью и считают проблему решённой. Это не решение для продакшена. Нужно настроить исключения или вариации по cookie.
  • Ставят одновременно несколько оптимизаторов. Два плагина минификации часто ломают порядок загрузки JS.
  • Правят код в родительской теме. После обновления всё сломается снова. Используйте дочернюю тему или отдельный мини-плагин.
  • Смотрят только на визуальный эффект. Попап может скрываться стилями, но состояние при этом не сохраняется. Проверяйте cookie и консоль.

Когда лучше не чинить кодом, а менять настройку плагина

Если My Popup уже решает вашу задачу, не усложняйте схему собственным JS без необходимости. Для типового сценария закрытия после показа достаточно корректной cookie и нормального кэша. Самописная логика нужна только тогда, когда вы связываете попап с кастомной формой, AJAX-действием или отдельной бизнес-логикой.

Если на сайте много технических конфликтов, имеет смысл сначала привести в порядок кэш, дубли скриптов и лишние оптимизации. В таких задачах часто помогает общий аудит технических настроек сайта, а не точечный фикс одного окна.

После внедрения исправления полезно ещё раз пройтись по странице с включённым DevTools и убедиться, что cookie создаётся, ошибок в консоли нет, а HTML не меняется после обновления без причины. Это самый надёжный способ понять, что попап действительно запоминает состояние, а не просто случайно перестал показываться из-за другого сбоя.

×

Увеличьте продажи!

Скидка на
My Popup!

-15%
плагин для WordPress

Успей купить ⋙