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

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

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

Основные причины проблемы:

  • Popup не учитывает состояние заказа в сессии пользователя;
  • Отсутствует проверка страницы «Спасибо за заказ»;
  • Использование cookie/локального хранилища без правильной логики;
  • Конфликты с AJAX-обновлениями WooCommerce;
  • Неправильное подключение скриптов, отвечающих за показ/скрытие popup.

Пошаговое решение: отключение popup после успешного заказа в WooCommerce

1. Определяем страницу «Спасибо за заказ»

WooCommerce после оформления заказа переадресует пользователя на страницу «thankyou». На этом этапе нужно отключить показ popup.

Для проверки используем условный тег is_order_received_page().

2. Добавляем проверку в шаблон popup

Если popup подключается через шаблон темы или плагина, оберните вызов popup в условие, чтобы он не рендерился на странице заказа:

if ( ! function_exists('is_order_received_page') || ! is_order_received_page() ) {
    // Код вывода popup
}

3. Использование JavaScript для удаления popup после заказа

Если popup создаётся через JS, можно добавить скрипт, который проверит URL и скроет popup:

document.addEventListener('DOMContentLoaded', function() {
    if (window.location.href.indexOf('order-received') !== -1) {
        var popup = document.querySelector('.popup-class');
        if (popup) {
            popup.style.display = 'none';
        }
    }
});

4. Управление cookie/локальным хранилищем

Если показ popup контролируется cookie, установите флаг после успешного заказа и проверяйте его перед показом. Пример установки cookie в PHP:

add_action('woocommerce_thankyou', 'set_popup_disable_cookie');
function set_popup_disable_cookie( $order_id ) {
    if ( ! headers_sent() ) {
        setcookie('popup_disabled', '1', time() + 86400, COOKIEPATH, COOKIE_DOMAIN);
    }
}

В JS проверяем cookie перед показом:

function getCookie(name) {
  let matches = document.cookie.match(new RegExp(
    '(?:^|; )' + name.replace(/([\.$?*|{}()\[\]\\\/\+^])/g, '\\$1') + '=([^;]*)'
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}

if (getCookie('popup_disabled') !== '1') {
    // Показать popup
}

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

  • Оформите тестовый заказ в WooCommerce;
  • После перехода на страницу «Спасибо за заказ» убедитесь, что popup не отображается;
  • Обновите другие страницы сайта, чтобы проверить, что popup по-прежнему работает там, где нужно;
  • Очистите cookie и повторите проверку для разных ролей пользователей и устройств;
  • Проверьте работу popup при AJAX-загрузках (например, в корзине).

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

  • Проверка не на той странице: Использование is_checkout() вместо is_order_received_page() — popup будет скрываться не только после заказа, но и на странице оформления.
  • Cookie не устанавливаются из-за заголовков: Если cookie ставятся после вывода контента, PHP выдаст ошибку. Решение — ставить cookie на хуках, вызываемых до вывода (например, woocommerce_thankyou).
  • JavaScript запускается до загрузки DOM: Используйте DOMContentLoaded или jQuery $(document).ready() для корректной работы.
  • Конфликты с кэшированием: Статические HTML-кэши могут показывать устаревшую версию страницы, где popup не скрыт. Настройте исключения для страниц заказа.

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

  • Минимизируйте количество JS-кода на странице, отключая popup сразу на сервере там, где нужно.
  • Если используете cookie, установите флаг с ограниченным сроком действия (например, 24 часа), чтобы popup мог появляться повторно через время.
  • Не храните в cookie чувствительную информацию, только флаги состояния.
  • Проверяйте совместимость с плагинами кэширования и AJAX-обновлений WooCommerce.

Сравнение вариантов отключения popup после заказа

МетодПлюсыМинусы
PHP: is_order_received_page()Отключение на сервере, быстро, без мигания popupТребуется доступ к шаблонам, не подходит если popup генерируется клиентом
JavaScript: проверка URLПросто добавить, не требует изменения PHPВозможна кратковременная отрисовка popup перед скрытием
Cookie-флаг после заказаГибко, работает с AJAX и повторным посещениемСложнее реализовать, возможны проблемы с кэшированием
Как создать popup с отключением по времени в WordPress
27.02.2026
Как создать popup с отключением по IP в WordPress
15.04.2026
Как удалить всплывающее окно после закрытия в WordPress
07.12.2025
Как создать popup с динамическими формами в WordPress
01.04.2026
Как отладить и решить проблемы с показом popup из AJAX в WooCommerce
27.06.2026