Руководство по реализации геотаргетинга на WordPress. Геотаргетинг: Геолокационные плагины для WordPress
Захотелось мне как-то на одном из сайтов показывать рекламу только для пользователей из определенной страны, так как другим посетителям смотреть ее просто бессмысленно. Зачем лишний раз их раздражать или загромождать пространство веб-страницы ненужной информацией. Это, в принципе, может касаться не только рекламы, но и обычного контента (виджетов, информационных блоков и т.п.). Казалось бы, задача достаточно тривиальная, однако реализация ее отнюдь таковой не является. Это история поиска, рассказ о находках и размышления о возможных решениях.
В общем, я принялся искать плагины, связанные как-то с geo targeting или geo location, или с чем-то подобным. Все решения можно разделить на такие условные группы:
- платные модули с 30 бесплатными днями, с подписками по доллару в месяц или ценами около $49.99;
- плагины с официального сайта WordPress, что не обновлялись более двух лет, которые скачаны раз 100-200 или с сомнительными оценками.
- в третью группу я бы определил компромиссные решения, из которых можно хоть что-то выбрать.
Итого я остановился на трех вариантах.
Content By Location
Плагин староват, поддерживает версии WordPress до 3.3.2, но я все же решил его попробовать. Забегая наперед, скажу, что запуск на WP 3.1 и WP 3.4.2 не принесли результата. Я пытался вывести информацию как в виджете, так и в PHP коде шаблона – тщетно. Возможно, нужно покопаться в модуле чуть более детально. Задумка то у него очень даже неплохая.
Модуль Content By Location поддерживает работу сразу с тремя геолокационными сервисами: smart-ip.net, hostip.info, maxmind.com.
После установки вам просто нужно будет выбрать один из их. Затем для отображения текста используется шорткод:
Your content
Здесь вместо «country code» ставите сокращение страны по формату SO_3166-1_alpha-2 (nl, uk, us, ru, fr и т.п.). Собственно, плюсом является поддержка сразу нескольких сервисов, если вдруг кто-то из них откажется работать. Я тестировал первые два, третий это бесплатная и локальная база стран, которую нужно будет скачать. Она используется во многих решениях. Так что, если есть время, поэкспериментируйте.
IP2Location Tags
Плагин позволяет легко получать/отображать разную гео информацию о пользователе на основании его IP адреса. Вообще данное решение это лишь одно из многих, есть десятка два модулей под разные CMS.
Все они доступны, но вот база IP и стран – другой вопрос. Есть LITE версия (бесплатная) и коммерческая. Кроме того, сложности добавляет то, что вам придется как-то эту базу подключить, то ли указав пути, то ли подправив БД. Без базовых навыков разработки не разобраться.
Из позитивного можно назвать очень легкое использование модуля после подключения. Например следующий код:
Your IP is {ip:ipAddress} You are came from {ip:countryName}, {ip:regionName}, {ip:cityName}
… отобразит информацию о вашем адресе, стране, регионе и городе. Там подобных переменных очень много. Можно легко создавать функциональные сайты по типу определителей IP адресов.
Скажу сразу, это решение не бесплатное, однако весьма эффективное. Со стоимостью не все понятно – на сайте указано $25.00 или 5WMZ (то ли опечатка, то ли за 5 вмз можно купить).
Плюсов здесь хватает:
- быстрая установка и множество настроек;
- база IP обновляется автоматически бесплатно без регулярных платежей;
- кроме решение задачи геотаргетинга с отображением контента для разных стран, позволяет выполнять ряд других функций (перенаправление, флаги);
- поддержка более-менее актуальных версий WP до 3.8.
- код плагина не закодирован, можете изучать и править.
По описанию смахивает на то, что автор использует бесплатную (LITE) базу IP сервиса MaxMind GeoLite, о которой я говорил выше. Ее вполне хватает, к тому же она автоматически обновляется. Вообще за указанный набор функций считаю цену в 25 долларов более чем приемлемой. Зарубежные аналоги подороже будут. Конечно, если вы опытные веб-разработчик, то сами можете попытаться все реализовать.
Захотелось мне как-то на одном из сайтов показывать рекламу только для пользователей из определенной страны, так как другим посетителям смотреть ее просто бессмысленно. Зачем лишний раз их раздражать или загромождать пространство веб-страницы ненужной информацией. Это, в принципе, может касаться не только рекламы, но и обычного контента (виджетов, информационных блоков и т.п.). Казалось бы, задача достаточно тривиальная, однако реализация ее отнюдь таковой не является. Это история поиска, рассказ о находках и размышления о возможных решениях.
В общем, я принялся искать плагины, связанные как-то с geo targeting или geo location, или с чем-то подобным. Все решения можно разделить на такие условные группы:
- платные модули с 30 бесплатными днями, с подписками по доллару в месяц или ценами около $49.99;
- плагины с официального сайта WordPress, что не обновлялись более двух лет, которые скачаны раз 100-200 или с сомнительными оценками.
- в третью группу я бы определил компромиссные решения, из которых можно хоть что-то выбрать.
Итого я остановился на трех вариантах.
Плагин староват, поддерживает версии WordPress до 3.3.2, но я все же решил его попробовать. Забегая наперед, скажу, что запуск на WP 3.1 и WP 3.4.2 не принесли результата. Я пытался вывести информацию как в виджете, так и в PHP коде шаблона — тщетно. Возможно, нужно покопаться в модуле чуть более детально. Задумка то у него очень даже неплохая.
Модуль Content By Location поддерживает работу сразу с тремя геолокационными сервисами: smart-ip.net, hostip.info, maxmind.com.
После установки вам просто нужно будет выбрать один из их. Затем для отображения текста используется шорткод:
your content |
Your content
Здесь вместо «country code» ставите сокращение страны по формату SO_3166-1_alpha-2 (nl, uk, us, ru, fr и т.п.). Собственно, плюсом является поддержка сразу нескольких сервисов, если вдруг кто-то из них откажется работать. Я тестировал первые два, третий это бесплатная и локальная база стран, которую нужно будет скачать. Она используется во многих решениях. Так что, если есть время, поэкспериментируйте.
Плагин позволяет легко получать/отображать разную гео информацию о пользователе на основании его IP адреса. Вообще данное решение это лишь одно из многих, есть десятка два модулей под разные CMS.
Все они доступны, но вот база IP и стран — другой вопрос. Есть LITE версия (бесплатная) и коммерческая. Кроме того, сложности добавляет то, что вам придется как-то эту базу подключить, то ли указав пути, то ли подправив БД. Без базовых навыков разработки не разобраться.
Из позитивного можно назвать очень легкое использование модуля после подключения. Например следующий код:
Your IP is {ip:ipAddress} You are came from {ip:countryName}, {ip:regionName}, {ip:cityName}
… отобразит информацию о вашем адресе, стране, регионе и городе. Там подобных переменных очень много. Можно легко создавать функциональные сайты по типу определителей IP адресов .
Скажу сразу, это решение не бесплатное, однако весьма эффективное. Со стоимостью не все понятно — на сайте указано $25.00 или 5WMZ (то ли опечатка, то ли за 5 вмз можно купить).
Плюсов здесь хватает:
- быстрая установка и множество настроек;
- база IP обновляется автоматически бесплатно без регулярных платежей;
- кроме решение задачи геотаргетинга с отображением контента для разных стран, позволяет выполнять ряд других функций (перенаправление, флаги);
- поддержка более-менее актуальных версий WP до 3.8.
- код плагина не закодирован, можете изучать и править.
По описанию смахивает на то, что автор использует бесплатную (LITE) базу IP сервиса MaxMind GeoLite, о которой я говорил выше. Ее вполне хватает, к тому же она автоматически обновляется. Вообще за указанный набор функций считаю цену в 25 долларов более чем приемлемой. Зарубежные аналоги подороже будут. Конечно, если вы опытные веб-разработчик, то сами можете попытаться все реализовать.
Если знаете другие интересные (и работающие) решения геолокационных задач в WordPress — пишите в комментария.
Привет! Сегодня я покажу вам очень полезный плагин, который должен стоять на каждом сайте WordPress. Плагин добавляет на ваш сайт функцию геотаргетинга. Вы сможете показывать или скрывать контент в виджете для пользователей из определённых стран. Пример, на ваш сайт зашёл пользователь из Украины и вы не хотите, чтобы для данного пользователя показывалась реклама Яндекса РСЯ в виджете. Вы можете сделать так, чтобы на вашем сайте реклама показывалась для всех пользователей, из всех стран, кроме Украины или любой другой страны.
Скрыть или показать можно любой материал в виджете, текст, фото, видео, html. Всё очень просто! Как это сделать, смотрите далее!
Вам понадобится плагин . Установить вы его сможете прямо из админ-панели WordPress. Перейдите на страницу: Плагины – Добавить новый , введите название плагина в форму поиска, установите и активируйте открывшийся плагин.
– Comma separated list of Country Codes, в данном поле вам нужно указать код или коды стран, для которых вы хотите показывать или скрывать данный виджет.
– Comma separated list of IDs of posts not listed above, здесь можно указать для исключения.
– Обратите внимание. Я скрыл виджет для всех пользователей из Украины, Америки, Англии и России.
Всё готово! После сохранения настроек, функция геотаргетинга начнёт работать.
25 мая 2015 в 14:23Геотаргетинг по городам (регионам, странам) для WordPress
- PHP ,
- WordPress
Причины создания
Недавно попросили сделать геотаргетинг по городам для сайта на wordpress. Пересмотрев существующие геотаргетинг-плагины (в том числе платные), не нашёл не одного работающего с городами (только страны). Поэтому решил сделать свой, используя какую-нибудь существующую базу для определения местоположения по IP-адресу. Сначала начал с разработки функции в шаблоне, но потом решил создать плагин и выложить на github, так как думаю, что он может пригодиться кому-нибудь ещё.Выбор базы
Первым делом нужно было выбрать базу. И это, наверное, одна из самых сложных проблем. В процессе разработки пробовал много вариантов, даже делал CURL-запросы на сайты, определяющие местоположение по ip, и парсил их. Но все они были не точны, к примеру, один Московский IP определяло как Москву, другой - просто Россия. Также нужно было, чтобы плагин работал не только с Россией, но и с Беларусью и Украиной. Перепробовав кучу множество баз, я остановился на Sypex Geo. У них есть условно-платная и бесплатная версии баз. Условно-платная использует REST API и возвращает данные в виде xml, json и jsonp. Бесплатную можно скачать в виде файла, также можно скачать класс для работы с ней. Условно-платная версия более точная, но бесплатно предоставляет только 10 000 запросов. Бесплатная версия тоже достаточно точна и обновляется на сайте.Функционал
Как я уже писал, начинал я делать не с плагина, а с функции в шаблоне. Сначала думал только об условно-платной версии базы, но количество бесплатных запросов закончилось за день-два. Поэтому перешёл на бесплатную, используя готовый класс для работы с файлом базы.При разработке плагина я решил сделать выбор между локальной базой и REST API. В будущем планирую сделать кнопку автоматического обновления базы.
Также из базы можно вернуть русские и английские имена городов (стран, регионов). В связи с этим сделал выбор языка.
Ещё столкнулся с тем, что нужно включить список несколько городов или наоборот исключить какой-то.
Настройка плагина в админке
Реализация
Так как с Wordpress я работаю редко (как и со всеми CMS) и написанием плагинов для него никогда не занимался, начал читать, как их писать и смотреть, как устроены существующие. Идею реализации взял с существующих гео-плагинов. Ещё долго думал писать функционально или объектно-ориентированно. Решил функционально, так как плагин не большой.Вкратце опишу его работу.
При активации плагина инициируем две опции: тип бд и язык на котором будем вводить названия.
Register_activation_hook(__FILE__, "wp_sypexgeo_activation");
function wp_sypexgeo_activation() {
update_option("sgeo_language", "en");
update_option("sgeo_dbase", "loc");
}
Далее add_filter("the_content", "geotargeting_filter");
add_filter("the_content_rss", "geotargeting_filter");
add_filter("the_excerpt", "geotargeting_filter");
add_filter("the_excerpt_rss", "geotargeting_filter");
вызывают функцию
geotargeting_filter
function geotargeting_filter($s) { //parse Country preg_match_all("#\[" . GEOTARGETING_COUNTY . "\s*(in|out)=([^\]]+)\](.*?)\#isu", $s, $country); //parse Country preg_match_all("#\[" . GEOTARGETING_REGION . "\s*(in|out)=([^\]]+)\](.*?)\#isu", $s, $region); //parse Country preg_match_all("#\[" . GEOTARGETING_CITY . "\s*(in|out)=([^\]]+)\](.*?)\#isu", $s, $city); if (empty($country) && empty($region) && empty($city)) { return $s; } $base_type = get_option("sgeo_dbase"); if ($base_type == "loc") { $ipdata = getLocInfo(); } elseif ($base_type == "rm") { $ipdata = getRemInfo(); } if (!empty($country)) { foreach ($country as $i => $raw) { $type = strtolower($country[$i]); $countries = strtolower(trim(str_replace(array("\"", """, "\n", "\r", "\t", " "), "", $country[$i]))); $content = $country[$i]; $countries = explode(",", $countries); $replacement = ""; if ((($type == "in") && in_array($ipdata["country"], $countries)) || (($type == "out") && !in_array($ipdata["country"], $countries))) { $replacement = $content; } $s = str_replace($raw, $replacement, $s); } } if (!empty($region)) { foreach ($region as $i => $raw) { $type = strtolower($region[$i]); $regions = strtolower(trim(str_replace(array("\"", """, "\n", "\r", "\t"), "", $region[$i]))); $content = $region[$i]; $regions = explode(",", $regions); $replacement = ""; if ((($type == "in") && in_array($ipdata["region"], $regions)) || (($type == "out") && !in_array($ipdata["region"], $regions))) { $replacement = $content; } $s = str_replace($raw, $replacement, $s); } } if (!empty($city)) { foreach ($city as $i => $raw) { $type = strtolower($city[$i]); $cities = strtolower(trim(str_replace(array("\"", """, "\n", "\r", "\t", " "), "", $city[$i]))); $content = $city[$i]; $cities = explode(",", $cities); $replacement = ""; if ((($type == "in") && in_array($ipdata["city"], $cities)) || (($type == "out") && !in_array($ipdata["city"], $cities))) { $replacement = $content; } $s = str_replace($raw, $replacement, $s); } } return $s; }
В которую приходит текущий контент. В зависимости от типа базы вызывается функция для получения данных. Затем идёт поиск специальных тегов в шаблоне и сверка их с данными о местоположении. Если данные совпадают то конструкция заменяется на содержимое из тегов, если нет - она удаляется.
Использование
Для указания списка стран: Привет Belarus,Russia!Для указания списка регионов: Привет Moscow Region!
Для указания списка городов: Привет Минск,Брест!
Если вы хотите выбрать страны (регионы, города) за исключением указанных, используйте «out»: Привет всем, кроме Minsk,Brest!
Пример использования в шаблоне:
Добро пожаловать в WordPress. Это ваша первая запись. Отредактируйте или удалите её, затем пишите! Наши контакты: +375295552255+375475552255
Заключение
Надеюсь, мой плагин кому-нибудь пригодится. Если есть вопросы или предложение - пишите. Также, если кто-то считает, что нужно использовать другую базу (геосервис или ещё что-нибудь), предлагайте, я добавлю или можете добавить сами.Недавно попросили сделать геотаргетинг по городам для сайта на . Пересмотрев существующие геотаргетинг-плагины (в том числе платные), не нашёл не одного работающего с городами (только страны). Поэтому решил сделать свой, используя какую-нибудь существующую базу для определения местоположения по IP-адресу. Сначала начал с разработки функции в шаблоне, но потом решил создать плагин и выложить на github, так как думаю, что он может пригодиться кому-нибудь ещё.
Выбор базы
Первым делом нужно было выбрать базу. И это, наверное, одна из самых сложных проблем. В процессе разработки пробовал много вариантов, даже делал CURL-запросы на сайты, определяющие местоположение по ip, и парсил их. Но все они были не точны, к примеру, один Московский IP определяло как Москву, другой - просто Россия. Также нужно было, чтобы плагин работал не только с Россией, но и с Беларусью и Украиной. Перепробовав кучу множество баз, я остановился на Sypex Geo. У них есть условно-платная и бесплатная версии баз. Условно-платная использует REST API и возвращает данные в виде xml, json и jsonp. Бесплатную можно скачать в виде файла, также можно скачать класс для работы с ней. Условно-платная версия более точная, но бесплатно предоставляет только 10 000 запросов. Бесплатная версия тоже достаточно точна и обновляется на сайте.
Функционал
Как я уже писал, начинал я делать не с плагина, а с функции в шаблоне. Сначала думал только об условно-платной версии базы, но количество бесплатных запросов закончилось за день-два. Поэтому перешёл на бесплатную, используя готовый класс для работы с файлом базы.
При разработке плагина я решил сделать выбор между локальной базой и REST API. В будущем планирую сделать кнопку автоматического обновления базы.
Также из базы можно вернуть русские и английские имена городов (стран, регионов). В связи с этим сделал выбор языка.
Ещё столкнулся с тем, что нужно включить список несколько городов или наоборот исключить какой-то.
Настройка плагина в админке
Реализация
Так как с WordPress я работаю редко (как и со всеми CMS) и написанием плагинов для него никогда не занимался, начал читать, как их писать и смотреть, как устроены существующие. Идею реализации взял с существующих гео-плагинов. Ещё долго думал писать функционально или объектно-ориентированно. Решил функционально, так как плагин не большой.
Вкратце опишу его работу.
При активации плагина инициируем две опции: тип бд и язык на котором будем вводить названия.
Register_activation_hook(__FILE__, "wp_sypexgeo_activation" ); function wp_sypexgeo_activation () { update_option("sgeo_language" , "en" ); update_option("sgeo_dbase" , "loc" ); }
Add_filter("the_content" , "geotargeting_filter" ); add_filter("the_content_rss" , "geotargeting_filter" ); add_filter("the_excerpt" , "geotargeting_filter" ); add_filter("the_excerpt_rss" , "geotargeting_filter" );
вызывают функцию
geotargeting_filter
В которую приходит текущий контент. В зависимости от типа базы вызывается функция для получения данных. Затем идёт поиск специальных тегов в шаблоне и сверка их с данными о местоположении. Если данные совпадают то конструкция заменяется на содержимое из тегов, если нет - она удаляется.
Использование
Для указания списка стран:
Привет Belarus,Russia!
Для указания списка регионов:
Привет Moscow Region!
Для указания списка городов:
Привет Минск,Брест!
Если вы хотите выбрать страны (регионы, города) за исключением указанных, используйте «out»:
Привет всем, кроме Minsk,Brest!
Пример использования в шаблоне:
Добро пожаловать в WordPress. Это ваша первая запись. Отредактируйте или удалите её, затем пишите! Наши контакты: +375295552255+375475552255
Заключение
Надеюсь, мой плагин кому-нибудь пригодится. Если есть вопросы или предложение - пишите. Также, если кто-то считает, что нужно использовать другую базу (геосервис или ещё что-нибудь), предлагайте, я добавлю или можете добавить сами.