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

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

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

Чтобы убедиться в наличии проблемы, проверьте следующее:

  • Используется ли AJAX-оформление заказа (например, через кастомные скрипты или плагины)?
  • Открывается ли popup поверх страницы оформления заказа или на страницах с AJAX-формой?
  • Существует ли событие JavaScript, которое сигнализирует об успешном оформлении заказа?

Пошаговое решение: закрываем popup по событию успешного оформления заказа через AJAX

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

В WooCommerce AJAX-оформление заказа обычно сопровождается триггером события 'checkout_order_processed' на сервере и вызовами JavaScript-колбеков на клиенте. Для нашего решения необходимо отследить событие, которое генерируется после успешного оформления заказа и получить обратную связь в JS.

Если используется стандартный checkout.js WooCommerce, можно подписаться на событие jQuery 'checkout_place_order_success', которое вызывается после успешного AJAX-запроса.

2. Добавляем JavaScript-код для закрытия popup

Предположим, что popup реализован с помощью плагина или кастомного кода и имеет уникальный ID или класс для управления показом и скрытием. В примере ниже popup имеет ID #myPopup.

jQuery(function($){
    $('body').on('checkout_place_order_success', function(){
        // Проверяем, что popup открыт
        if($('#myPopup').is(':visible')){
            $('#myPopup').fadeOut(300); // или другой метод скрытия
        }
    });
});

Этот код подписывается на событие, которое вызывается после успешного оформления заказа, и закрывает popup без перезагрузки страницы.

3. Если событие не срабатывает — используем хуки WooCommerce и AJAX

Если стандартное событие недоступно, можно добавить кастомный AJAX-обработчик на стороне сервера и по его ответу закрывать popup.

Например, в functions.php темы добавляем:

add_action('wp_ajax_custom_checkout_action', 'custom_checkout_action_callback');
add_action('wp_ajax_nopriv_custom_checkout_action', 'custom_checkout_action_callback');
function custom_checkout_action_callback() {
    // Здесь логика оформления заказа
    wp_send_json_success(['message' => 'Заказ оформлен']);
}

На фронтенде вызываем AJAX и после успешного ответа закрываем popup:

jQuery.ajax({
    url: wc_checkout_params.ajax_url,
    method: 'POST',
    data: {action: 'custom_checkout_action', ...},
    success: function(response) {
        if(response.success) {
            $('#myPopup').fadeOut(300);
        }
    }
});

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

Чтобы убедиться, что popup закрывается корректно:

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

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

  • Отсутствие события для подписки в JS. Решение: используйте стандартные события WooCommerce checkout_place_order_success или реализуйте собственный AJAX-обработчик с возвратом JSON-ответа.
  • Неверный селектор popup. Проверьте, что ID или класс popup точно совпадает с используемым в коде.
  • Конфликты с другими скриптами. Отключите сторонние плагины, которые могут блокировать или изменять AJAX-запросы.
  • Кэширование страниц. Кэш может препятствовать обновлению состояния popup. Отключите кэширование на страницах с динамическими элементами.

Практические советы по оптимизации и безопасности

  • Используйте nonce в AJAX-запросах WooCommerce для защиты от CSRF атак:
jQuery.ajax({
    url: wc_checkout_params.ajax_url,
    method: 'POST',
    data: {
        action: 'custom_checkout_action',
        security: wc_checkout_params.checkout_nonce,
        ...
    },
    success: function(response) {
        if(response.success) {
            $('#myPopup').fadeOut(300);
        }
    }
});
  • Для производительности не держите popup открытым постоянно — загружайте его по требованию или используйте ленивую загрузку.
  • Обрабатывайте ошибки AJAX-запросов, чтобы пользователь видел уведомления при проблемах с оформлением заказа.

Сравнение вариантов решения

МетодСложностьГибкостьНедостатки
Подписка на событие checkout_place_order_successНизкаяСредняяРаботает только со стандартным WooCommerce AJAX
Кастомный AJAX-обработчик с возвратом JSONСредняяВысокаяТребует доработки серверного кода
Принудительное закрытие popup при смене URLНизкаяНизкаяНе подходит для AJAX без перезагрузки страницы
Как удалить popup после успешного отправленного заказа в WooCommerce без перезагрузки страницы
07.05.2026
Как создать popup с отключением по ролям пользователей в WordPress
15.02.2026
Как создать персонализированные popup в WordPress для повышения конверсии
16.11.2025
Как создать автоматический popup в WordPress при входе на сайт
30.11.2025
Как создать popup с отключением по IP в WordPress
15.04.2026