Ivan45
Постоялец
- Регистрация
- 22 Янв 2015
- Сообщения
- 59
- Реакции
- 146
- Автор темы
- #1
Вам нужно знать местоположение клиента, который написал вам с вашего сайта через форму Cоntact Form 7? Да не вопрос.
Версия Contact Form 7, на момент написания статьи, 5.0.5 (04.09.20 - обновил часть статьи до версии 5.2.2)
Создадим почтовый тег, который будет передавать IP клиента стороннему сервису, а мы от него получать страну, область и город (на самом деле, не только их, но в рамках этой инструкции я покажу только их; с полным выводом можно ознакомиться Для просмотра ссылки Войди
- Идем в папку с плагином по адресу: /wp-content/plugins/contact-form-7/includes
Файлы, которые нам нужны - открываем их для редактирования: submission.php и special-mail-tags.php, а также по адресу: /wp-content/plugins/contact-form-7/modules файл flamingo.php. - Займемся сначала submission.php.
Поиском ищем по файлу фразы: remote_ip и далее буду показывать на скриншотах и вставлять код для удобства копирования.
2.1
Для просмотра ссылки Войдиили Зарегистрируйся
PHP:$city_ip = $this->get_city_ip_addr();
PHP:'city_ip' => $city_ip,
2.2
Для просмотра ссылки Войдиили Зарегистрируйся
PHP:$this->get_meta( 'city_ip' ),
2.3
Для просмотра ссылки Войдиили Зарегистрируйся
PHP:private function get_city_ip_addr() { $is_bot = preg_match("~(Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl)~i", $_SERVER['HTTP_USER_AGENT']); $geo = !$is_bot ? json_decode(file_get_contents("https://api.sypexgeo.net/ключ/json/".$_SERVER['REMOTE_ADDR']), true) : []; $city_ip_addr = $geo['country']['name_ru'] . ", ". $geo['region']['name_ru'] . ", " . $geo['city']['name_ru']; return apply_filters( 'wpcf7_city_ip_addr', $city_ip_addr ); }
или Зарегистрируйся.
Не хотите регистрироваться? Зря. Тогда вместо api.sypexgeo.net/ключ/json/ вводите: api.sypexgeo.net/json/
В $is_bot мы отсеиваем обращения ботов к базе, чтобы они не тратили установленный системой лимит запросов.
В $geo мы делаем запрос с IP клиента к их базе, чтобы затем в $city_ip_addr сформировать страну, область и город.
Внимание! Начиная примерно с лета 2020 года, перестал работать скрипт (на почту приходят пустые значения), если ссылка api.sypexgeo.net/ключ/json/ начинается с https, я поменял на http, так работает, техподдержка молчит.
2.4
Для просмотра ссылки Войдиили Зарегистрируйся
PHP:$target[] = $this->get_meta( 'city_ip' );
- Теперь займемся файлом special-mail-tags.php.
Так же поиском ищем по файлу фразы: remote_ip.
3.1
Для просмотра ссылки Войдиили Зарегистрируйся
PHP:if ( '_city_ip' == $name ) { if ( $city_ip = $submission->get_meta( 'city_ip' ) ) { return $city_ip; } else { return ''; } }
- Теперь займемся файлом flamingo.php.
Так же поиском ищем по файлу фразы: remote_ip.
4.1
Для просмотра ссылки Войдиили Зарегистрируйся
PHP:'city_ip',
С файлами покончено, займемся шаблоном письма.
- В админке Wordpress переходим в плагин Contact Form 7, затем в вашу созданную форму, затем во вкладке "Письмо -> Тело письма" вставляем созданный нами новый почтовый тег в то место, где вам надо вывести в письме страну, область и город: [_city_ip]
У меня это выглядит вот так:
Для просмотра ссылки Войдиили Зарегистрируйся
На почту придет вот так:
Для просмотра ссылки Войдиили Зарегистрируйся
Переменная выводит то, что нам надо в формате: "Страна, Область, Город".
Если нужен другой формат, то правится в файле submission.php в переменной:
PHP:$city_ip_addr = $geo['country']['name_ru'] . ", ". $geo['region']['name_ru'] . ", " . $geo['city']['name_ru'];
Последнее редактирование: