В этой статье я опишу как я делал геотаргетинг в wordpress. Если в двух словах:
- Написал плагин для ведения списка городов и телефонов;
 - Подключил jquery фреймворк jquery.balloon.js;
 - Воспользовался API Yandex карт;
 - Установил плагин EasyModal;
 - Все это связал воедино и добавил работу с cookie;
 
Кому интересны подробности – добро пожаловать под кат
Что получилось в итоге Вы можете посмотреть на сайте: http://fasad-steklo.ru
Шаг 1. Пишем плагин для wordpress
Сразу определяемся, что плагин нам нужен для того, чтобы добавлять/редактировать/удалять города и соответствующие им телефоны
Создаем директорию с именем плагина и не забываем, что имя плагина должно быть уникальным.
Я назвал плагин opCity и таким образом у меня в wordpress появилась директория /wp-content/plugins/opCity и файл /wp-content/plugins/opCity/opCity.php.
При этом плагин должен создать таблицу в базе данных для хранения городов и телефонов. Это решается добавлением функции opCity_install(). Так выглядит функция у меня:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						function opCity_install()		//Функция активации плагина {     global $wpdb;     $table_opCity = $wpdb->prefix.opCity_city;     $sql1 = "	CREATE TABLE IF NOT EXISTS `".$table_opCity."` ( 		  `id` int(10) NOT NULL AUTO_INCREMENT, 		  `name` varchar(250) NOT NULL, 		  `phone` varchar(250) NOT NULL, 		  PRIMARY KEY (`id`) 		) ENGINE=InnoDB DEFAULT CHARSET=utf8; 	     ";     $wpdb->query($sql1);		//Добавляем таблицу }  | 
					
Ну и конечно дропаем таблицу при деактивации плагина следующим кодом:
| 
					 1 2 3 4 5 6 7  | 
						function opCity_uninstall()		//Функция деактивации плагина {     global $wpdb;     $table_opCity = $wpdb->prefix.opCity_city;     $sql1 = "DROP TABLE `".$table_opCity."`;";		//удаляем таблицу     $wpdb->query($sql1); }  | 
					
Весь код приводить здесь не буду. Там более-менее все ясно, так что качайте мой архив с файлами и разархивируйте его в /wp-content/plugins.
Скачали? Разархивировали? Активировали? Тогда продолжаем!
Как Вы уже заметили в архиве 3 файла:
- opCity.php – в нем содержится основная логика работы плагина.
 - jquery.balloon.js – это jquery фреймворк для подсказок по типу: “Ваш город: Москва. Угадали?”
 - my_query.js – в этом файле функции работы с cookie и работа с ajax запросами.
 
Шаг2. Подключение jquery.balloon.js
Тут Вам ничего писать не надо, т.к. все уже написано в скаченном архиве.
Подключение обоих js файлов выполняется в теле файла opCity.php следующей строкой
| 
					 1 2 3 4 5  | 
						add_action('wp_enqueue_scripts', 'my_enqueue'); function my_enqueue() { wp_enqueue_script('jqballoon', plugins_url('/js/jquery.balloon.js',__FILE__), array('jquery')); }  | 
					
Аналогичным образом добавляем и скрипт my_query.js
Шаг 3. Использование API Yandex.maps
Подключение осуществляется несколько иначе, т.к. эти скрипты находятся на другом ресурсе (на Яндексе).
Приведу код подключения яндекс карт в своих плагинах wordpress:
| 
					 1 2 3  | 
						wp_deregister_script( 'yandexmaps' ); wp_register_script( 'yandexmaps', 'http://api-maps.yandex.ru/2.0/?load=package.standard&lang=ru-RU'); wp_enqueue_script( 'yandexmaps' );  | 
					
Вызов процедур для работы c yandex я прописал в файле my_query.js
Код относительно API яндекс карт получился весьма маленьким.
В одной из jquery процедур, которая вызывается после загрузки страницы я вызываю инициализацию Яндекс карт примерно так:
| 
					 1 2 3  | 
						jQuery(document).ready(function(){      ymaps.ready(init); });  | 
					
В действительности там еще идет проверка на наличие города в cookie, но если вам интересны такие подробности – смотрите код в скаченном архиве.
Определить город посетителя, используя Яндекс карты не просто, а очень просто. Навешиваем на процедуру инициализации примерно такой код:
| 
					 1 2 3  | 
						function init() {    var geolocation = ymaps.geolocation; }  | 
					
А уже в переменной geolocation живет определившийся город (geolocation.city).
Шаг 4. Подключение плагина EasyModal
Данный плагин устанавливается из админки и достаточно прост в настройках, поэтому расписывать этот шаг не буду.
Шаг 5. Связка всего этого безобразия
Для начала нам нужно отображать список городов, которые мы добавили через админку (Параметры -> База городов).
Поэтому в файле opCity.php регистрируем шорткод следующим кодом:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | 
						add_shortcode( 'opcity_list', 'get_city_list' ); function get_city_list() { 	global $wpdb; 	$table_opCity = $wpdb->prefix.opCity_city; 	$citylist = $wpdb->get_results("SELECT * FROM $table_opCity order by name"); 	$opstr = "<ul class='cityul'>"; 	foreach ($citylist as $item) 			//Выбираем в цикле все записи из таблицы 	{              $opstr .= "<li class='cityli'><a href='#' onclick='myfunction(".$item->id."); return false;' class='mycity city_".$item->id."'>".$item->name."</a></li>"; 	} 	$opstr .= "</ul>"; return $opstr; }  | 
					
Затем вставляем шорткод в подготовленную ранее форму EasyModal. Если кто не в курсе – шорткод вставляется так: [opcity_list]
А ссылку, при клике на которую будет появляться список городов я вставил в шаблон header.php так: <a href=”#” class=”eModal-3″ id=”cityname”></a>
Клик по городу вызывает ajax функцию, которая делает выборку из базы данных и вставляет телефон в нужно поле, т.е. навешиваю на событие onclick вызов функции: myfunction(31); return false; где 31 – id записи в базе данных.
Запись в cookie id города происходит только при выборе города или при нажатии на кнопку “Да”, когда плагин спрашивает угадал ли он город.
После формирования страницы плагин смотрит в cookie и ищет там город. Если город найден – вызывает ajax функцию, которая делает запрос к базе и проставляет в нужные элементы наименование города и телефон
Если в cookie не находит город – пытается его определить. После определения – ищет в базе город по наименованию. Если находит – ставит его, если не находит – ставит Москву, но Вы можете немного переписать код и сделать город по умолчанию другим.
Вот и все. Если у Вас остались вопросы – пишите в комментариях.