Иногда возникает необходимость определить страну и город посетителя. Самым простой способ — определение по 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;
}
Вот, теперь можно применять этот шорткод например в формах, где в зависимости от страны будет меняться код страны или на сайте показывать телефон того филиала который актуален. Надеюсь статья была вам полезна.