WordPress определение ip пользователя, разберем как можно определить ip пользователя и его город и вывисти ему соответствено информацию для его города, а другие не показывать.
Существует плагин WP GeoTargeting для wordpress определение ip пользователя. В общем его скачиваем и его переделываем. Было у меня задание, нужно было сделать чтобы были новости по городам….
Устанавливаем этот плагин, а дальше можно написать свой плагин используя те файлы что есть в этом плагине. Там два текстовых файла один с городами, а другой кажется со странами
в cities.txt находятся города, в counties находятся страны. в файле data_files.php находится класс для определения кажется городов и вывода списка городов. А в файле geo находится класс для проверки айпи пользователя
wordpress определение ip пользователя код
Приведу просто код который писал, там он в виде плагина, создается вначале метабокс для типа post с методаными города для wordpress определение ip пользователя, и там есть функция которая определяет айпи пользователя
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
<?php /* Plugin Name: simple-add-product-plagin Plugin URI: http://kselax.ru/ Description: Create a simple store to display product information Version: 1.0 Author: Hacker Kselax Author URI: http://kselax.ru License: GPLv2 */ //подключаем файлы require_once('data_files.php');//класс для работы с городами require_once("geo.php"); // Подключаем класс для работы с базой //определяем город по ip function my_plugin_get_city(){ //задаем айпи места, если пусто то будет твой айпи //реальны //абакан '89.249.128.4' //киев '37.53.32.49' //москва 62.76.232.3 //волгоград 88.87.88.215 //димитров 62.122.100.1 $options = array('ip' => ''); $geo = new Geo_my($options); //получаем ip $ip = $geo->ip; //получаем город $city = $geo->get_value('city',false); return $city; } //функция возвращает имя если оно есть и пусто если нет function my_plugin_get_name(){ //проверка на post $name=my_plugin_obr_post(); //получаем пост если есть if($name!="") return $name; my_plugin_obr_post(); $options = array(); $cities_file_path = dirname(__FILE__) . '/cities1.txt'; $cities_file = fopen($cities_file_path, 'r'); // Перебираем данные файла rewind($cities_file);//переводим на начало файла while(!feof($cities_file)) { $str = fgets($cities_file); // Сохраняем строку if (empty($str)) continue; $arRecord = explode("\t", trim($str)); // Дробим на массив $city_id = $arRecord[0]; // $city_name = iconv('windows-1251', 'UTF-8', $arRecord[1]); // Меняем кодировку с windows-1251 на UTF-8 и сохраняем $city_name=$arRecord[1]; $options[$city_id] = $city_name; } //получаем город $city=my_plugin_get_city();//получаем город echo "city= $city<br>"; if(isset($options[$city])) return $options[$city]; return ""; } //функция для обработки пост запроса function my_plugin_obr_post(){ if(isset($_POST['my_plagin_town_sort'])){ return sanitize_text_field( $_POST['my_plagin_town_sort']); } } // echo "pre<pre>"; // print_r($city); // echo "</pre>"; // $data_files = new WtGeoTargetingDataFiles_my(); // //получаем по id город // $debug_geo_data = $data_files->getCityInfo('1'); // echo "<pre>"; // print_r($debug_geo_data); // echo "</pre>"; // wp_die('end'); //create metadate add_action( 'add_meta_boxes', 'my_plagin_meta_box_init' ); // meta box functions for adding the meta box and saving the data function my_plagin_meta_box_init() { // создаем наш пользовательский metabox //1 - HTML ID attribute //2 - title в метабоксе //3 - callback function //4 - тип постов ('post','page',or custom post type name) //5 - размещение ('normal','advanced',or 'side') //6 - приоритет ('high','core','default',or 'low') add_meta_box( 'prowp-meta', 'Выберите город', 'my_plagin_meta_box', 'post', 'side', 'default' ); } // draw metabox function my_plagin_meta_box( $post, $box ) { // retrieve the custom meta box values $my_plagin_featured = get_post_meta( $post->ID, '_my_plagin_town', true ); // == display form metabox == //nonce for security wp_nonce_field( plugin_basename( __FILE__ ), 'my_plagin_save_meta_box' ); //custom meta box form elements //get towns from file $data_files = new WtGeoTargetingDataFiles_my(); $array_fields=$data_files->getCities(); //display towns echo "<p>Город: "; echo "<select id='my_plagin_town' name='my_plagin_town'>"; $selected=($my_plagin_featured=="")?"selected='selected'": ''; echo "my_plagin_featured= $my_plagin_featured <br>"; echo "<option value='Без города' $selected>Без города</option>"; foreach($array_fields as $v){ $selected = ($my_plagin_featured == $v) ? "selected='selected'" : ''; echo "<option value='$v' $selected>$v</option>"; } echo "</select>"; echo "</p>"; } // hook to save our meta box data when the post is saved //хук сохраняет нашего метабокс данные когда пост сохранен add_action( 'save_post', 'my_plagin_save_meta_box' ); function my_plagin_save_meta_box( $post_id ) { // process form data if $_POST is set if( isset( $_POST['my_plagin_town'] ) ) { // if auto saving skip saving our meta box data if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; //check nonce for security //1 - значение уникальное из поля. //2 - ключь if(wp_verify_nonce($_POST['my_plagin_save_meta_box'],plugin_basename( __FILE__ ))==false) return; // save the meta box data as post meta using the post ID as a unique prefix // сохраняем метабокс данные как post meta используя post ID и уникальный префикс //1 - post ID //2 - meta_key //3 - сами данные которые добавляются update_post_meta( $post_id, '_my_plagin_town', sanitize_text_field( $_POST['my_plagin_town'] ) ); } } ?> |
И сам вывод постов только тех постов для которых существует город пользователя, его добавляем в шаблон темы где нужно вывести посты.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<h1>Вывод постов</h1> <!-- выводим форму --> <?php $city=my_plugin_get_name(); if($city=="") $city="Без города"; echo "city= $city<br>"; echo "<form method='post' action='".site_url()."' name='element'>"; $data_files = new WtGeoTargetingDataFiles_my(); $array_fields=$data_files->getCities(); //display towns echo "<p>По регионам: "; echo "<select id='my_plagin_town' name='my_plagin_town_sort'>"; $selected=($city=="")?"selected='selected'": ''; echo "my_plagin_featured= $my_plagin_featured <br>"; echo "<option value='Без города' $selected>Без города</option>"; foreach($array_fields as $v){ $selected = ($city == $v) ? "selected='selected'" : ''; echo "<option value='$v' $selected>$v</option>"; } echo "</select>"; ?> <input type="submit" name="sub" value="sort"/> <?php echo "</p>"; echo "</form>"; //вывод в цикле статей $cat2args = array( 'posts_per_page' => 5 , 'meta_key' => '_my_plagin_town', 'meta_value' => $city, 'orderby' => 'date' ); $myPosts = new WP_Query( $cat2args ); while ($myPosts->have_posts()) : $myPosts->the_post(); ?> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </h2> <?php endwhile; wp_reset_query(); ?> <h1>Конец вывода постов</h1> |
Скачать можно исходники wordpress определение ip пользователя можно тут: my-plagin
Код я так до нормального не доделал, это просто наброски. да и том там не для всех городов