Как определить город и страну по IP в WordPress — пишем шорткод

как определить страну по IP - шорткод wordpress WordPress

Иногда возникает необходимость определить страну и город посетителя. Самым простой способ — определение по IP.

Для того чтобы получить город, страну, телефонный код страны, границы, примерные координаты на карте, континент и другие данные по IP, можем воспользоваться API, которое предоставляет этот бесплатный сервис (до 10 тысяч запросов в месяц) — https://ipwhois.io/

Запрос достаточно простой: http://ipwho.is/[IP address]

Например:

http://ipwho.is/94.29.7.178

Возвращает следующие данные

{
    "About Us": "https:\/\/ipwhois.io",
    "ip": "94.29.7.178",
    "success": true,
    "type": "IPv4",
    "continent": "Europe",
    "continent_code": "EU",
    "country": "Russia",
    "country_code": "RU",
    "region": "Moscow",
    "region_code": "MOW",
    "city": "Moscow",
    "latitude": 55.755826,
    "longitude": 37.6173,
    "is_eu": false,
    "postal": "103073",
    "calling_code": "7",
    "capital": "Moscow",
    "borders": "AZ,BY,CN,EE,FI,GE,KP,KZ,LT,LV,MN,NO,PL,UA",
    "flag": {
        "img": "https:\/\/cdn.ipwhois.io\/flags\/ru.svg",
        "emoji": "\ud83c\uddf7\ud83c\uddfa",
        "emoji_unicode": "U+1F1F7 U+1F1FA"
    },
    "connection": {
        "asn": 25513,
        "org": "PJSC Moscow city telephone network",
        "isp": "PJSC Moscow city telephone network",
        "domain": "spd-mgts.ru"
    },
    "timezone": {
        "id": "Europe\/Moscow",
        "abbr": "MSK",
        "is_dst": false,
        "offset": 10800,
        "utc": "+03:00",
        "current_time": "2023-11-17T12:54:08+03:00"
    }
}

Напишем шорткод, который будет возвращать нам город и страну. Этот код необходимо прописать в functions.php.

add_shortcode( 'ipgeo', 'geo_shortcode' );
function geo_shortcode( $atts ){
	$ip = $_SERVER['REMOTE_ADDR'];
	$url = 'http://ipwho.is/'.$ip;
	$data = json_decode(file_get_contents($url));
	$output = '<p><strong>Страна: </strong>'.$data->country.'</p><p><strong>Город: </strong>'.$data->city.'</p>';
	return $output;
}

Результат шорткода [ipgeo] будет такой:

Страна: Russia
Город: Moscow

Если же вам нужна только страна и у вас более 10 тыс запросов в месяц, то можно воспользоваться вот этим простым бесплатным API — https://api.iplocation.net/, который по IP возвращает небольшое количество данных

Обращение к этому API тоже очень простое но немного отличается от того, что я описал выше:

https://api.iplocation.net/?ip=XX.XX.XX.XX

Результат получаем в виде json:

{"ip":"94.29.9.47","ip_number":"1578961199","ip_version":4,"country_name":"Russian Federation","country_code2":"RU","isp":"PJSC Moscow City Telephone Network","response_code":"200","response_message":"OK"}

Напишем 2 шорткода. Этот код нужно прописать в файле function.php.

Один будет возвращать полностью название страны, второй только код (например «ru»).

// шорткод [ipgeo] возвращает название страны, вида 'Russian Federation'
add_shortcode( 'ipgeo', 'geo_countryname' );

function geo_countryname( $atts ){
	$ip = $_SERVER['REMOTE_ADDR'];
	$url = 'https://api.iplocation.net/?ip='.$ip;
	$data = json_decode(file_get_contents($url));
	return $data->country_name;
}

// шорткод [ipgeo_code] возвращает код страны, вида 'RU'
add_shortcode( 'ipgeo_code', 'geo_countrycode' );

function geo_countrycode( $atts ){
	$ip = $_SERVER['REMOTE_ADDR'];
	$url = 'https://api.iplocation.net/?ip='.$ip;
	$data = json_decode(file_get_contents($url));
	return $data->country_code2;
}

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

Оцените статью
SiteMaker
автор
Дамир Хасанов
Разработчик сайтов с большим опытом. Свой первый сайт создал в 2000 году. Эксперт по WordPress и Drupal. Множество успешных реализованных проектов.