В некоторых случаях необходимо показывать popup на сайте WordPress всем посетителям, кроме определённых IP-адресов. Например, чтобы не раздражать сотрудников компании, администраторов или тестировщиков, которые заходят с фиксированных IP. В этой статье разберём, как создать popup с отключением показа по IP с помощью простого кода и готовых плагинов.
Почему важно отключать popup по IP
Часто popup используется для привлечения внимания к акциям, подпискам и важной информации. Однако, если сотрудники или постоянные пользователи видят эти окна слишком часто, это может снижать комфорт работы с сайтом и создавать ложные данные аналитики.
Отключение показа popup по IP позволяет:
- Улучшить UX для внутренних пользователей.
- Избежать искажения статистики по конверсиям и взаимодействиям.
- Автоматизировать исключение определённых групп пользователей без дополнительных плагинов.
Создаём функцию для проверки IP в WordPress
Для начала нужно получить IP посетителя и сравнить с массивом исключённых IP. Добавим функцию wppopup_get_user_ip(), которая корректно определит IP, учитывая различные заголовки.
function wppopup_get_user_ip() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
return trim($ips[0]);
} else {
return $_SERVER['REMOTE_ADDR'] ?? '';
}
}Теперь создадим функцию wppopup_is_ip_excluded(), которая проверит, входит ли IP в список исключённых адресов:
function wppopup_is_ip_excluded($excluded_ips) {
$user_ip = wppopup_get_user_ip();
return in_array($user_ip, $excluded_ips);
}Список исключённых IP можно задавать в настройках или прямо в коде, например:
$excluded_ips = ['192.168.1.10', '123.45.67.89'];Интеграция с показом popup
Если вы используете свой код для popup, достаточно добавить проверку перед выводом окна:
if (!wppopup_is_ip_excluded($excluded_ips)) {
// Выводим код popup
echo '<div class="popup">Ваш popup контент</div>';
}Если применяете популярные плагины popup, например My Popup, можно использовать их функционал для добавления условий показа через хуки или фильтры.
Пример для плагина My Popup с фильтром
My Popup позволяет фильтровать показ через хук my_popup_should_show. Добавим проверку IP, чтобы запретить показ для исключённых адресов:
add_filter('my_popup_should_show', function($show) {
$excluded_ips = ['192.168.1.10', '123.45.67.89'];
if (wppopup_is_ip_excluded($excluded_ips)) {
return false;
}
return $show;
});Как расширить функциональность: диапазоны IP и CIDR
Иногда нужно исключать целые подсети, например офис с динамическими IP. Для этого полезно проверять IP в диапазоне или по маске CIDR.
Для проверки CIDR можно использовать библиотеку или функцию:
function wppopup_ip_in_cidr($ip, $cidr) {
list($subnet, $mask) = explode('/', $cidr);
return (ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($subnet);
}Теперь можно задать исключения так:
$excluded_cidrs = ['192.168.1.0/24', '123.45.67.0/28'];
function wppopup_is_ip_excluded_cidr($excluded_cidrs) {
$user_ip = wppopup_get_user_ip();
foreach ($excluded_cidrs as $cidr) {
if (wppopup_ip_in_cidr($user_ip, $cidr)) {
return true;
}
}
return false;
}Эту функцию можно использовать вместо простой проверки массива IP, чтобы сделать фильтр гибче.
Рекомендации по безопасности и производительности
1. Не храните список исключённых IP в базе данных без необходимости, лучше в настройках плагина или константах.
2. При большом количестве IP или CIDR используйте кеширование результата проверки, чтобы не перегружать сервер.
3. Тестируйте определение IP клиента, особенно если сайт работает за прокси или CDN (Cloudflare, Nginx).
4. Обновляйте список исключений, следите за изменениями IP у сотрудников или сервисов.
Заключение по теме
Отключение показа popup по IP — простой, но мощный способ улучшить пользовательский опыт и точность аналитики. С помощью приведённых функций и примеров вы сможете быстро добавить такую логику в свой сайт WordPress, используя как собственный код, так и популярные плагины, например My Popup. Это повысит качество взаимодействия с сайтом для разных групп пользователей и сделает вашу работу более профессиональной.