wordpress определение ip пользователя и вывод информации

Рубрика: wordpress, Дата: 4 April, 2016, Автор:

WordPress определение ip пользователя, разберем как можно определить ip пользователя и его город и вывисти ему соответствено информацию для его города, а другие не показывать.

Существует плагин WP GeoTargeting для wordpress определение ip пользователя. В общем его скачиваем и его переделываем. Было у меня задание, нужно было сделать чтобы были новости по городам….

wordpress определение ip пользователя

Устанавливаем этот плагин, а дальше можно написать свой плагин используя те файлы что есть в этом плагине. Там два текстовых файла один с городами, а другой кажется со странами
wp_GeoTargeting1в cities.txt находятся города, в counties находятся страны. в файле data_files.php находится класс для определения кажется городов и вывода списка городов. А в файле geo находится класс для проверки айпи пользователя

wordpress определение ip пользователя код

Приведу просто код который писал, там он в виде плагина, создается вначале метабокс для типа post с методаными города для wordpress определение ip пользователя, и там есть функция которая определяет айпи пользователя

Показать »

<?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'] ) );
    }
}

?>

И сам вывод постов только тех постов для которых существует город пользователя, его добавляем в шаблон темы где нужно вывести посты.

Показать »

<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

Код я так до нормального не доделал, это просто наброски. да и том там не для всех городов

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *