Как использовать хук WooCommerce для отключения popup после оплаты заказа

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

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

Основная причина — отсутствие использования подходящего хука, который срабатывает в момент изменения статуса заказа на «завершён» или «оплачен», или неверное управление куки/локальным хранилищем, отвечающим за показ popup.

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

1. Отслеживаем изменение статуса заказа через хук WooCommerce

WooCommerce предоставляет хук woocommerce_order_status_changed, который срабатывает при смене статуса заказа. Используя его, можно добавить логику для установки куки или сессии, чтобы отключить popup.

add_action('woocommerce_order_status_changed', 'disable_popup_after_order_payment', 10, 4);
function disable_popup_after_order_payment($order_id, $old_status, $new_status, $order) {
    // Проверяем новый статус
    if (in_array($new_status, array('processing', 'completed'))) {
        // Устанавливаем куки на месяц, чтобы отключить popup
        setcookie('disable_popup', '1', time() + MONTH_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);
    }
}

2. Проверяем наличие куки в шаблоне popup

В файле шаблона popup или в скрипте, который отвечает за показ окна, добавьте проверку на куки disable_popup. Если куки установлена, popup не показывается.

if (!isset($_COOKIE['disable_popup'])) {
    // Код показа popup
    echo '<div id="my-popup">...</div>';
}

3. Альтернатива — управление через JavaScript и локальное хранилище (localStorage)

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

function wpdocs_localize_popup_flag() {
    $disable_popup = isset($_COOKIE['disable_popup']) ? true : false;
    wp_localize_script('popup-script-handle', 'popupData', array(
        'disablePopup' => $disable_popup
    ));
}
add_action('wp_enqueue_scripts', 'wpdocs_localize_popup_flag');

В JS проверяем:

if (!popupData.disablePopup) {
    // показываем popup
}

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

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

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

  • Хук не срабатывает — проверьте, что функция подключена в functions.php или в плагине, и что WooCommerce активен.
  • Куки не устанавливаются — куки должны устанавливаться до вывода HTML, иначе будет ошибка. Проверьте, что нет лишнего вывода до setcookie.
  • Popup показывает игнорируя куки — проверьте, что в шаблоне или JS корректно проверяется куки/флаг.
  • Куки не удаляются — если нужно сбросить отключение popup, добавьте логику удаления куки.

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

  • Используйте хук woocommerce_order_status_changed с правильными приоритетами и не перегружайте его тяжелыми операциями.
  • Для установки куки используйте константы COOKIEPATH и COOKIE_DOMAIN для корректного домена и пути.
  • Не храните в куки чувствительные данные — используйте флаг для отключения popup.
  • Если popup содержит формы или скрипты, убедитесь в их оптимизации, чтобы не замедлять страницу.

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

МетодПростота реализацииКонтроль на клиентеНедостатки
Установка куки через PHP (хук WooCommerce)СредняяСредний (нужно проверять в JS или PHP)Требуется правильный порядок вызова setcookie, куки могут блокироваться браузером
Управление через JS localStorageВысокаяПолный контроль на клиентеМенее безопасно, легко сбрасывается пользователем
Серверный рендеринг с проверкой статуса заказаСложнееВысокийНагрузка на сервер, требует дополнительного кэширования
Как создать popup с отключением по времени в WordPress
27.02.2026
Как создать popup с автоматическим отключением при низкой производительности сайта в WordPress
23.04.2026
Как создать popup с отключением по клиентскому устройству в WordPress
29.03.2026
Как создать popup с отключением по часовому поясу в WordPress
05.04.2026
Как создать popup в WordPress с отложенным запуском и уникальным контентом
16.12.2025