Как удалить popup после отправки формы в WooCommerce без перезагрузки страницы

Диагностика проблемы: почему popup не закрывается автоматически

Часто при интеграции popup с WooCommerce возникает ситуация, когда всплывающее окно остается открытым после успешной отправки формы (например, оформления заказа, подписки или отзыва). Это происходит из-за того, что стандартный процесс WooCommerce обновляет страницу или выводит сообщение об успехе, но javascript popup не получает событие для своего закрытия. В результате пользователь видит устаревший popup, что ухудшает UX и может привести к повторным отправкам.

Пошаговое решение: автоматическое закрытие popup на события WooCommerce AJAX

Чтобы popup закрывался без перезагрузки страницы, нужно отследить успешное событие отправки формы и программно закрыть окно. В WooCommerce большинство форм работают через AJAX, и можно подписаться на соответствующие jQuery-события.

1. Определяем событие успешной отправки

Для оформления заказа WooCommerce генерирует событие 'checkout_place_order_success', для добавления отзыва можно использовать DOM-мутации или событие отправки формы.

2. Код для закрытия popup

Приведем пример кода, который закрывает popup с ID #my-popup после успешного оформления заказа:

jQuery(function($){
  $('form.checkout').on('checkout_place_order_success', function() {
    $('#my-popup').fadeOut(); // или используйте метод закрытия из вашего плагина popup
  });
});

Если событие checkout_place_order_success не срабатывает, можно подписаться на AJAX-события WooCommerce:

jQuery(function($){
  $(document.body).on('updated_checkout', function(){
    // Проверяем, если заказ успешно оформлен
    if( $('.woocommerce-order').length ) {
      $('#my-popup').fadeOut();
    }
  });
});

3. Закрытие popup после отправки формы отзыва

Для формы отзыва можно использовать следующий подход:

jQuery(function($){
  $('#commentform').on('submit', function(event){
    event.preventDefault();
    var form = $(this);
    $.ajax({
      type: 'POST',
      url: form.attr('action'),
      data: form.serialize(),
      success: function(response) {
        $('#my-popup').fadeOut();
        // Можно добавить сообщение об успехе
      },
      error: function() {
        alert('Ошибка отправки отзыва');
      }
    });
  });
});

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

  • Оформите тестовый заказ в WooCommerce через страницу оформления заказа с активным popup.
  • После успешного оформления popup должен закрыться автоматически без перезагрузки страницы.
  • Отправьте тестовый отзыв, если реализовали закрытие для формы отзыва — popup должен также скрыться.
  • Проверяйте консоль браузера на ошибки JavaScript — их отсутствие гарантирует, что код работает корректно.

Частые ошибки и способы их исправления

  • Неправильный селектор popup: Убедитесь, что в коде используется точный ID или класс popup, который отображается на странице. Проверьте через инструменты разработчика браузера.
  • Отсутствие события AJAX: Некоторые темы или плагины могут изменять поведение WooCommerce, отключая AJAX. В этом случае нужно отследить события вручную или использовать MutationObserver.
  • Конфликты с другими скриптами: Если popup управляется сторонним плагином, используйте его API для закрытия, а не jQuery.fadeOut().
  • Кэширование страниц: При активном кэше браузера или сервера события могут не срабатывать. Отключите кэширование для страниц оформления заказа на время тестов.

Практические советы по производительности и безопасности

  • Минимизируйте количество привязок событий; применяйте делегирование через $(document.body) для динамического контента.
  • Используйте проверенные селекторы и не вызывайте закрытие popup на каждом обновлении checkout, а только при подтверждении заказа.
  • Проверьте, что AJAX-запросы не раскрывают чувствительную информацию, особенно при работе с формами отзывов.
  • Если используете сторонние плагины popup, читайте документацию для правильного вызова методов закрытия, чтобы не нарушать внутреннюю логику.

Сравнение вариантов реализации

МетодПреимуществаНедостатки
Подписка на событие 'checkout_place_order_success'Простой, встроенный в WooCommerce, надежный при стандартном AJAXНе работает при отключенном AJAX или кастомных решениях
Отслеживание 'updated_checkout'Работает при обновлении checkout, универсальнееМожет срабатывать лишний раз, надо проверять состояние
Прямой AJAX-запрос через jQuery для отзываКонтроль над процессом отправки и успешным ответомТребует дополнительной обертки и обработки ошибок
Как создать popup с отключением по ролям пользователей в WordPress
15.02.2026
Как использовать popup для подтверждения действий в WooCommerce
21.06.2026
Как запретить повторное открытие popup в WordPress на одной странице
14.01.2026
Как сделать popup по активности пользователя в WordPress
05.01.2026
Как отладить и решить проблемы с показом popup из AJAX в WooCommerce
27.06.2026