Как создать popup с отключением по рефереру в WordPress

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

Почему важно управлять показом popup по рефереру

Реферер — это HTTP-заголовок, который передаёт адрес страницы, с которой пришёл пользователь. Иногда нужно исключить показ popup для посетителей с конкретных ресурсов, чтобы не мешать UX, не создавать избыточное количество окон или избежать конфликтов с внешними кампаниями.

Например, если пользователь пришёл с рекламного баннера, где уже есть призыв к действию, popup может дублировать сообщение и отпугивать клиента. Либо для пользователей из внутреннего каталога popup не нужен.

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

Реализация отключения popup по рефереру с помощью кода

Рассмотрим пример, как сделать отключение popup, если реферер совпадает с одним из заданных в списке доменов. Для примера создадим небольшую функцию в теме или в плагине, которая будет проверять HTTP_REFERER и передавать результат в JavaScript для управления показом popup.

Шаг 1. Определяем список запрещённых рефереров

Для удобства создадим массив с доменами, при которых popup показываться не должен:

function wppopup_check_referrer() {
    $excluded_referrers = [
        'example.com',
        'partner-site.ru',
        'ads.google.com'
    ];

    if (!isset($_SERVER['HTTP_REFERER'])) {
        return true; // Нет реферера - показываем popup
    }

    $referrer = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);

    foreach ($excluded_referrers as $excluded) {
        if (stripos($referrer, $excluded) !== false) {
            return false; // Совпало - не показываем popup
        }
    }
    return true; // Не совпало - показываем popup
}

Функция возвращает true, если popup надо показывать, и false — если нет.

Шаг 2. Передаем результат в JavaScript

Теперь нужно передать этот параметр в JS, чтобы можно было управлять показом popup на клиенте. Вставим в footer следующий код:

add_action('wp_footer', 'wppopup_pass_referrer_flag');
function wppopup_pass_referrer_flag() {
    $show_popup = wppopup_check_referrer() ? 'true' : 'false';
    ?>
    <script>
        window.wppopupShowByReferrer = <?php echo $show_popup; ?>;
    </script>
    <?php
}

Шаг 3. Управляем показом popup в JavaScript

Допустим, у вас есть функция wppopup_show(), которая отвечает за показ всплывающего окна. Добавим проверку реферера:

document.addEventListener('DOMContentLoaded', function() {
    if (typeof window.wppopupShowByReferrer !== 'undefined' && window.wppopupShowByReferrer) {
        wppopup_show();
    }
});

Если wppopupShowByReferrer равно false, popup не показывается.

Использование популярных плагинов с фильтрацией по рефереру

Некоторые плагины для popup предоставляют возможность фильтров показа по URL, но не всегда есть готовая опция по рефереру. В таких случаях полезно использовать плагины с хуками или возможностью добавить кастомный JS.

Плагин My Popup

Плагин My Popup позволяет подключать собственные JS-скрипты, где можно реализовать логику с проверкой реферера и блокировкой показа.

Плагин Clearfy Pro

В Clearfy Pro есть расширенные настройки оптимизации и управления показом popup, включая возможность создавать правила по URL и параметрам запроса. Можно расширить их функционал добавлением PHP-кода по примеру выше.

Дополнительные советы по работе с реферером

Обратите внимание, что реферер не всегда передаётся браузером — это зависит от настроек безопасности и политики конфиденциальности пользователя. Поэтому не стоит полагаться исключительно на это условие, а использовать его как дополнительный фильтр.

Для повышения надёжности можно сочетать проверку реферера с другими условиями, например, параметрами URL, cookie или пользовательскими метками.

Также важно учитывать, что реферер содержит полный URL, поэтому для сравнения используйте parse_url с выделением хоста и сравнивайте именно домены, игнорируя протокол и пути.

Итоговый пример полного решения

<?php
// В functions.php или плагине
function wppopup_check_referrer() {
    $excluded_referrers = [
        'example.com',
        'partner-site.ru',
        'ads.google.com'
    ];

    if (!isset($_SERVER['HTTP_REFERER'])) {
        return true;
    }

    $referrer = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);

    foreach ($excluded_referrers as $excluded) {
        if (stripos($referrer, $excluded) !== false) {
            return false;
        }
    }
    return true;
}

add_action('wp_footer', 'wppopup_pass_referrer_flag');
function wppopup_pass_referrer_flag() {
    $show_popup = wppopup_check_referrer() ? 'true' : 'false';
    ?>
    <script>
        window.wppopupShowByReferrer = <?php echo $show_popup; ?>;

        document.addEventListener('DOMContentLoaded', function() {
            if (window.wppopupShowByReferrer) {
                wppopup_show();
            }
        });

        function wppopup_show() {
            // Ваш код показа popup
            alert('Показываем popup, реферер разрешён');
        }
    </script>
    <?php
}
?>
Как отложить показ popup в WordPress по времени
31.12.2025
Как создать popup с автоматическим отключением при низкой производительности сайта в WordPress
23.04.2026
Как удалить popup при переходе на другую страницу в WordPress без перезагрузки
23.04.2026
Как запретить повторное открытие popup в WordPress на одной странице
14.01.2026
Как отладить проблемы с показом popup в WordPress
06.02.2026