Руководство по реализации геотаргетинга на 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

Заключение

Надеюсь, мой плагин кому-нибудь пригодится. Если есть вопросы или предложение - пишите. Также, если кто-то считает, что нужно использовать другую базу (геосервис или ещё что-нибудь), предлагайте, я добавлю или можете добавить сами.