В этой статье рассмотрим, как реализовать в 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
}
?>