Давно хотел на проектах, где комментирование “бурлит”, установить код, который отображал бы геолокацию пользователя по его ip-адресу. В принципе, ничего сложного в этом нет. Пару раз брался, но всё заканчивалось на том, что не мог найти подходящую базу. И вот, похоже, нашёл.
Есть такой хороший проект Sypex Geo и есть у него не менее хороший API. Да, он немного неточно показывает город моего провайдера (вместо Александрии он почему-то указывает на Кировоград), но это пока лучшая база, которую я нашёл. Ведь другие либо неправильно указывали даже регион, либо были на английском языке. Решено было вставить это API на действующие сайты.
В WordPress’е шаблон комментариев имеет название comments.php и лежит он в папке с темой (…/wp-content/themes/…/comments.php). Если же вы пользуетесь темами семейства TwentyX, вам нужен будет файл функций functions.php. В общем, находим мы строчку типа
<div class="comment-date"><?php printf( __( '%1$s at %2$s' ), get_comment_date(), get_comment_time() ); ?>
(в данном случае я ставлю необходимый код после даты и времени комментария, если нужно вставить его в другом месте – пожалуйста) и после неё вставляем следующий код:
<?php $output = ''; // обнуление вывода $url = 'http://api.sypexgeo.net/json/'.$comment->comment_author_IP; // отправка ip автора комментария $response = file_get_contents($url); $output = json_decode( $response ); if ( !empty($output->{'country'}->{'name_ru'} ) ) { // если ответ содержит название страны echo '<br />Местоположение: '.$output->{'city'}->{'name_ru'}.', '.$output->{'country'}->{'name_ru'}; }; ?>
В общем, всё просто. На странице с API расписано более развёрнуто, только без php-кода. В данный момент код успешно работает на “Правдорубе” и “Люстрація.Кіровоградщина”. Установил и здесь, конечно же.
Надеюсь, кому-нибудь станет полезным этот материал. Вопросы – в комментариях.