Plugin Directory

Changeset 2517233


Ignore:
Timestamp:
04/18/2021 08:42:08 PM (5 years ago)
Author:
kustyrt
Message:

Version 1.8

Location:
wt-geotargeting/trunk
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • wt-geotargeting/trunk/includes/SypexGeo.php

    r2322049 r2517233  
    1111    public $ip;
    1212
    13     public $apiKey = null;
     13    public $server = 'api.sypexgeo.net';
     14    public $api_key = null;
    1415
    1516    public $error = false;
     
    1819    function getData(){
    1920
    20         $ch = curl_init('http://api.sypexgeo.net/json/' . $this->ip);
     21        $url = 'http://';
     22        $url .= $this->server . '/';
     23        if (!empty($this->api_key)) $url .= $this->api_key . '/';
     24        $url .= 'json/' . $this->ip;
     25
     26        $ch = curl_init($url);
    2127        curl_setopt($ch, CURLOPT_HTTPGET , true);
    2228        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  • wt-geotargeting/trunk/includes/WtGeolocation.php

    r2322049 r2517233  
    2424    public $options = array(
    2525        'base_name' => 'ipgeobase_service',
     26        'sypexgeo_server' => 'api.sypexgeo.net',
     27        'sypexgeo_api_key' => null,
    2628        'maxmind_language' => array('ru')
    2729    );
     
    210212            $service = new SypexGeo();
    211213            $service->ip = $this->ip;
     214            $service->server = $this->options['sypexgeo_server'];
     215            $service->api_key = $this->options['sypexgeo_api_key'];
    212216            $data_service = $service->getData();
    213217
  • wt-geotargeting/trunk/includes/WtInitialization.php

    r2292398 r2517233  
    201201    function shortcodeGeotargetingAction($param, $content){
    202202
     203
     204
    203205        // Определяем выводился-ли ранее контент для указанного типа, если да, то завершаем выполнение
    204206        if (isset($param['type']) && isset($this->record[$param['type']]) &&
  • wt-geotargeting/trunk/includes/WtKit.php

    r2304169 r2517233  
    88    {
    99        /**
    10         * Объекты данных
    11         * 23.09.2016
    12         */
     10         * Объекты данных
     11         * 23.09.2016
     12         */
    1313        static $obj;
    1414
     
    2222        static $geolocation;
    2323
     24        static $cache_data;
     25
    2426        protected static $instance;
    2527
     
    2830            self::$obj = new stdClass;
    2931            self::$theme = new stdClass;
     32
     33            add_shortcode('wt_kit', array($this, 'shortcodeMain'));
    3034        }
    3135
     
    8084
    8185        /**
    82         * Вывод постов в виде выпадающего списка
     86         * Вывод постов в виде выпадающего списка
    8387         * Функция является модифицированной копией wp_dropdown_pages()
    8488         * 08.11.2016
    8589         */
    86         static function wp_dropdown_posts( $args = '' ) {
     90        static function wp_dropdown_posts($args = '')
     91        {
    8792            $defaults = array(
    8893                'post_type' => 'post',
     
    104109            );
    105110
    106             $r = wp_parse_args( $args, $defaults );
    107 
    108             $posts = get_posts( $r );
     111            $r = wp_parse_args($args, $defaults);
     112
     113            $posts = get_posts($r);
    109114
    110115            // Удаляем HTML теги из заголовка
    111             foreach ($posts as $post){
     116            foreach ($posts as $post) {
    112117                $post->post_title = strip_tags($post->post_title);
    113118            }
     
    115120            $output = '';
    116121            // Back-compat with old system where both id and name were based on $name argument
    117             if ( empty( $r['select']['id'] ) ) {
     122            if (empty($r['select']['id'])) {
    118123                $r['select']['id'] = $r['name'];
    119124            }
    120125
    121             if ( ! empty( $posts ) ) {
     126            if (!empty($posts)) {
    122127                $class = '';
    123                 if ( ! empty( $r['select']['class'] ) ) {
    124                     $class = " class='" . esc_attr( $r['select']['class'] ) . "'";
     128                if (!empty($r['select']['class'])) {
     129                    $class = " class='" . esc_attr($r['select']['class']) . "'";
    125130                }
    126131
    127                 $output = "<select name='" . esc_attr( $r['select']['name'] ) . "'" . $class . " id='" . esc_attr( $r['select']['id'] ) . "'>\n";
    128                 if ( $r['show_option_no_change'] ) {
     132                $output = "<select name='" . esc_attr($r['select']['name']) . "'" . $class . " id='" . esc_attr($r['select']['id']) . "'>\n";
     133                if ($r['show_option_no_change']) {
    129134                    $output .= "\t<option value=\"-1\">" . $r['show_option_no_change'] . "</option>\n";
    130135                }
    131                 if ( $r['show_option_none'] ) {
    132                     $output .= "\t<option value=\"" . esc_attr( $r['option_none_value'] ) . '">' . $r['show_option_none'] . "</option>\n";
     136                if ($r['show_option_none']) {
     137                    $output .= "\t<option value=\"" . esc_attr($r['option_none_value']) . '">' . $r['show_option_none'] . "</option>\n";
    133138                }
    134                 $output .= walk_page_dropdown_tree( $posts, $r['depth'], $r );
     139                $output .= walk_page_dropdown_tree($posts, $r['depth'], $r);
    135140                $output .= "</select>\n";
    136141            }
    137142
    138             if ( $r['echo'] ) {
     143            if ($r['echo']) {
    139144                echo $output;
    140145            }
     
    142147        }
    143148
    144         static function debugLogAdd($content = null){
     149        static function debugLogAdd($content = null)
     150        {
    145151            // Имя файла с логами
    146152            $filename = WP_CONTENT_DIR . '/wt_debug.txt';
     
    150156            $file_content .= PHP_EOL;
    151157
    152             if (!empty($content)){
     158            if (!empty($content)) {
    153159                $file_content .= $content;
    154160                $file_content .= PHP_EOL;
     
    164170            file_put_contents($filename, $file_content);
    165171        }
     172
     173        /**
     174         * Шорткод [wt_kit] для произвольного отображения контента
     175         *
     176         * @param $atts
     177         * @param null $content
     178         * @return |null
     179         */
     180        public function shortcodeMain($atts, $content = null)
     181        {
     182            $atts = shortcode_atts(array(
     183                'post_type' => null,
     184                'label' => null,
     185                'get' => 'content'
     186            ), $atts);
     187
     188            if (empty($atts['post_type'])) return null;
     189            if (empty($atts['label'])) return null;
     190
     191            $args = array(
     192                'post_type' => $atts['post_type'],
     193                'name' => $atts['label'],
     194                'posts_per_page' => -1
     195            );
     196
     197            $query = new WP_Query($args);
     198
     199            if (empty($query->posts[0])) return null;
     200
     201            $post = $query->posts[0];
     202
     203            $return = do_shortcode($post->post_content);
     204            $return = wpautop($return);
     205
     206            return $return;
     207        }
     208
     209        static function getUserIdByMeta($meta_key, $meta_value)
     210        {
     211            global $wpdb;
     212
     213            $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
     214
     215            $user_id = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %d AND meta_value = %s", $meta_key, $meta_value));
     216
     217            return $user_id;
     218        }
     219
     220        static function getPostIdByMeta($meta_key, $meta_value)
     221        {
     222            global $wpdb;
     223
     224            $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
     225
     226            $post_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %d AND meta_value = %s", $meta_key, $meta_value));
     227
     228            return $post_id;
     229        }
     230
     231        static function getPostIdsByMeta($meta_key, $meta_value)
     232        {
     233            $cache_key = 'getPostsIdByMeta_' . $meta_key . '_' . $meta_value;
     234
     235            $post_ids = wp_cache_get( $cache_key );
     236
     237            if( false === $post_ids ){
     238                global $wpdb;
     239                $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
     240
     241                $post_ids = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %d AND meta_value = %s", $meta_key, $meta_value));
     242
     243                wp_cache_set( $cache_key, $post_ids );
     244            }
     245
     246            return $post_ids;
     247        }
    166248    }
    167249
  • wt-geotargeting/trunk/includes/wt_data_files.php

    r2289246 r2517233  
    66class WtGtDataFiles
    77{
     8    public $countries_list = array();
     9
    810    function __construct(){
    9        
     11        if (class_exists('Wt')) Wt::setObject('data_files', $this);
    1012    }
    1113
     
    102104        return $city_info;
    103105    }
     106
     107    public function refreshCountriesList(){
     108        $countries_file_path = WT_GT_PRO_PLUGIN_DIR . '/data/countries.txt';
     109        $countries_file = fopen($countries_file_path, 'r');
     110
     111        // Перебираем данные файла
     112        rewind($countries_file);
     113
     114        fgets($countries_file); // Заголовки
     115
     116        while(!feof($countries_file))
     117        {
     118            $str = fgets($countries_file);              // Сохраняем строку
     119            if (empty($str)) continue;
     120            $arRecord = explode("\t", trim($str));  // Дробим на массив
     121            $country_alpha2 = $arRecord[3];
     122            $country_name = $arRecord[0];       // Меняем кодировку с windows-1251 на UTF-8 и сохраняем
     123            $this->countries_list[$country_alpha2] = $country_name;
     124        }
     125    }
     126
     127    public function getCountryName($alpha2){
     128        if (empty($this->countries_list)) $this->refreshCountriesList();
     129
     130        return $this->countries_list[$alpha2];
     131    }
    104132}
    105 ?>
     133
     134new WtGtDataFiles();
  • wt-geotargeting/trunk/includes/wt_gt_admin.php

    r2308191 r2517233  
    1717    );
    1818
     19    var $geobase_sipexgeo_servers = array(
     20        'api.sypexgeo.net' => 'Автовыбор сервера (GeoDNS)',
     21        'ua.sxgeo.city' => 'Украина, Хмельницкий',
     22        'ru.sxgeo.city' => 'Россия, Москва',
     23        'ru2.sxgeo.city' => 'Россия, Санкт-Петербург',
     24        'ru3.sxgeo.city' => 'Россия, Екатеринбург',
     25        'de.sxgeo.city' => 'Германия, Фалькенштайн',
     26        'nl.sxgeo.city' => 'Нидерланды, Амстердам',
     27        'fr.sxgeo.city' => 'Франция, Гравлин',
     28        'it.sxgeo.city' => 'Италия, Ареццо',
     29        'uk.sxgeo.city' => 'Англия, Лондон',
     30        'us.sxgeo.city' => 'США, Нью-Йорк',
     31        'us2.sxgeo.city' => 'США, Маями',
     32        'us3.sxgeo.city' => 'США, Сан-Хосе',
     33        'sg.sxgeo.city' => 'Сингапур, Сингапур',
     34        'jp.sxgeo.city' => 'Япония, Токио'
     35    );
     36
    1937    var $debug_mode_array = array(
    2038        0 => 'Отключен',
     
    124142
    125143        $country_alpha2_items = $this->data->getCountriesForSelect();
    126         $country_alpha2_items = array_merge(array('' => 'Неизвестно'), $country_alpha2_items);
     144        $country_alpha2_items = array('' => 'Неизвестно') + $country_alpha2_items;
    127145
    128146        $city_items = $this->data->getCities();
    129         $city_items = array_merge(array('' => 'Неизвестно'), $city_items);
     147        $city_items = array('' => 'Неизвестно') + $city_items;
    130148
    131149        // $option_group, $option_name, $sanitize_callback
     
    150168            'desc'      => 'Выберите сервис для определения месторасположения посетителя сайта'
    151169        );
    152         add_settings_field('name', 'Сервис геолокации', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params);
     170        add_settings_field('base_name', 'Сервис геолокации', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params);
     171
     172        $db_geobase_options = get_option('wt_geotargeting_geobase');
     173        $db_geobase_name = $db_geobase_options['base_name'];
    153174
    154175        $field_params = array(
    155             'type'      => 'text', // тип
     176            'type'      => 'select',
     177            'id'        => 'sypexgeo_server',
     178            'option_name' => 'wt_geotargeting_geobase',
     179            'label_for' => 'sypexgeo_server',
     180            'vals'      => $this->geobase_sipexgeo_servers,
     181            'class'     => 'sypexgeo-settings'
     182        );
     183        if ($db_geobase_name != 'sypexgeo_service') $field_params['class'] .= ' hide-if-js';
     184
     185        add_settings_field('sypexgeo_server', 'SypexGeo: Сервер', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params);
     186
     187
     188        $field_params = array(
     189            'type'      => 'text',
     190            'id'        => 'sypexgeo_api_key',
     191            'option_name' => 'wt_geotargeting_geobase',
     192            'label_for' => 'sypexgeo_api_key',
     193            'class'     => 'sypexgeo-settings',
     194            'desc' => 'Ключ сервиса SypexGeo для расширения количества запросов. Не обязательно.'
     195        );
     196        if ($db_geobase_name != 'sypexgeo_service') $field_params['class'] .= ' hide-if-js';
     197
     198        add_settings_field('sypexgeo_api_key', 'SypexGeo: API key', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params);
     199
     200
     201        $field_params = array(
     202            'type'      => 'text',
    156203            'id'        => 'dadata_api_key',
    157204            'option_name' => 'wt_geotargeting_geobase',
    158             'label_for' => 'dadata_api_key'
     205            'label_for' => 'dadata_api_key',
     206            'class'     => 'dadata-settings'
    159207        );
     208        if ($db_geobase_name != 'dadata_service') $field_params['class'] .= ' hide-if-js';
     209
    160210        add_settings_field('dadata_api_key', 'DaData: API key', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params);
    161211
    162212        $field_params = array(
    163             'type'      => 'text', // тип
     213            'type'      => 'text',
    164214            'id'        => 'maxmind_user_id',
    165215            'option_name' => 'wt_geotargeting_geobase',
    166             'label_for' => 'maxmind_user_id'
    167         );
     216            'label_for' => 'maxmind_user_id',
     217            'class'     => 'maxmind-settings'
     218        );
     219        if ($db_geobase_name != 'maxmind_service') $field_params['class'] .= ' hide-if-js';
     220
    168221        add_settings_field('maxmind_user_id', 'MaxMind: User ID', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params);
    169222
    170223        $field_params = array(
    171             'type'      => 'text', // тип
     224            'type'      => 'text',
    172225            'id'        => 'maxmind_license_key',
    173226            'option_name' => 'wt_geotargeting_geobase',
    174             'label_for' => 'maxmind_license_key'
    175         );
     227            'label_for' => 'maxmind_license_key',
     228            'class'     => 'maxmind-settings'
     229        );
     230        if ($db_geobase_name != 'maxmind_service') $field_params['class'] .= ' hide-if-js';
     231
    176232        add_settings_field('maxmind_license_key', 'MaxMind: License key', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params);
    177233
    178234        $field_params = array(
    179             'type'      => 'checkbox', // тип
     235            'type'      => 'checkbox',
    180236            'id'        => 'deactivate_auto_set_region_from_cookie',
    181237            'option_name' => 'wt_geotargeting_region',
     
    186242
    187243        $field_params = array(
    188             'type'      => 'checkbox', // тип
     244            'type'      => 'checkbox',
    189245            'id'        => 'deactivate_save_region_from_cookie',
    190246            'option_name' => 'wt_geotargeting_sistem',
     
    202258
    203259        $field_params = array(
    204             'type'      => 'text', // тип
     260            'type'      => 'text',
    205261            'id'        => 'city',
    206262            'option_name' => 'wt_geotargeting_default',
     
    210266
    211267        $field_params = array(
    212             'type'      => 'text', // тип
     268            'type'      => 'text',
    213269            'id'        => 'region',
    214270            'option_name' => 'wt_geotargeting_default',
     
    218274
    219275        $field_params = array(
    220             'type'      => 'text', // тип
     276            'type'      => 'text',
    221277            'id'        => 'district',
    222278            'option_name' => 'wt_geotargeting_default',
     
    243299
    244300        $field_params = array(
    245             'type'      => 'select', // тип
     301            'type'      => 'select',
    246302            'id'        => 'mode',
    247303            'option_name' => 'wt_geotargeting_debug',
     
    253309
    254310        $field_params = array(
    255             'type'      => 'text', // тип
     311            'type'      => 'text',
    256312            'id'        => 'ip',
    257313            'option_name' => 'wt_geotargeting_debug',
     
    278334        );
    279335        add_settings_field( 'country_alpha2', 'Страна посетителя', array(&$this, 'displaySettings'), 'wt_geotargeting_debug_page', 'wt_geotargeting_debug', $field_params );
    280 
    281         // Обновление файла с контактной информацией с мультисайта
    282         add_settings_field(
    283             'multisite_contacts_update',
    284             'Мультисайт',
    285             array(&$this, 'displaySettingButtonUpdateContactsMultisite'),
    286             'wt_geotargeting_debug_page',
    287             'wt_geotargeting_debug',
    288             array() );
    289 
    290         add_action(  // Добавление скрипта для обработки нажатия кнопки
    291             'admin_print_footer_scripts',
    292             array(&$this, 'javascriptUpdateContactsMultisite'),
    293             99);
    294 
    295         add_action( // Регистрируем функцию для обработки ajax запроса
    296             'wp_ajax_update_contacts_multisite',
    297             array(&$this, 'callbackUpdateContactsMultisite'));
    298336    }
    299337
     
    316354        echo '<p>Воспользовавшись нижепредставленными полями вы можете протестировать работу сайта от лица пользователей из других регионов.<br>Тестирование возможно только администратором сайта.</p>';
    317355    }
    318 
    319     /**
    320      * Кнопка "Обновить контактную информацию с сайтов"
    321      */
    322     function displaySettingButtonUpdateContactsMultisite(){
    323         echo '<button type="button" onclick="click_update_contacts_multisite();">Обновить контактную информацию с сайтов</button>';
    324     }
    325 
    326     function javascriptUpdateContactsMultisite() {
    327         ?>
    328         <script type="text/javascript" >
    329             function click_update_contacts_multisite() {
    330                 var data = {
    331                     action: 'update_contacts_multisite',
    332                     whatever: 1234
    333                 };
    334                 // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
    335                 jQuery.post( ajaxurl, data, function(response) {
    336                     alert(response);
    337                 });
    338             }
    339         </script>
    340         <?php
    341     }
    342 
    343     /**
    344      * Выборка контактных данных с мультисайтов
    345      */
    346     function callbackUpdateContactsMultisite() {
    347         $contacts = array();
    348 
    349         $sites = wp_get_sites();
    350 
    351         $site_count = 0;
    352         foreach ($sites as $site){
    353             switch_to_blog($site['blog_id']);
    354 
    355             $site_contacts = (array) get_option('wt_contacts', array());
    356 
    357             if (empty($site_contacts['region'])) continue;
    358 
    359             $site_contacts['blog_id'] = $site['blog_id'];
    360             $contacts[$site_contacts['region']] = $site_contacts;
    361 
    362             $site_count++;
    363         }
    364 
    365         $file_contacts = json_encode($contacts);
    366 
    367         // Определяем каталог и создаем в нем файл
    368         $new_file = WP_CONTENT_DIR.'/uploads/multisite_geo_info.txt';
    369         wp_mkdir_p(dirname($new_file));
    370 
    371         // Открываем созданный файл для записи и сохраняем в него данные
    372         $ifp = @ fopen( $new_file, 'wb' );
    373         @fwrite( $ifp, $file_contacts);
    374         fclose( $ifp );
    375         clearstatcache();
    376 
    377         echo 'Информация успешно сохранена. '.$site_count.' мультисайт.';
    378 
    379         wp_die(); // выход нужен для того, чтобы в ответе не было ничего лишнего, только то что возвращает функция
    380     }
    381356}
    382357?>
  • wt-geotargeting/trunk/includes/wt_gt_admin_behavior.php

    r2369473 r2517233  
    22/**
    33 * Шаблон для админок
     4 * v.1
    45 */
    56class WtGtAdminBehavior
     
    1112     */
    1213    function dataFilesInit(){
    13 
    1414        if (!is_object($this->data)) $this->data = new WtGtDataFiles();
    1515    }
  • wt-geotargeting/trunk/readme.txt

    r2369473 r2517233  
    5757
    5858== Changelog ==
     59= 1.8 =
     60* Сервис SypexGeo: Выбор сервера и ввод ключа API
     61* JavaScript WtLocation (*Pro): Обработка поля "Поиск"
     62* Регион (*Pro): Дополнительные поля - region, region_name, parent_name, parent_type, map_zoom, vk, instagram, facebook, telegram, whats_app, viber.
     63* Шорткод WT_LOCATION (*Pro): Значение {get_phone_href} в виде ссылки на телефонный номер.
     64* Шорткод WT_LOCATION (*Pro): Новые атрибуты - show_for_parent, not_show_for_parent.
     65* Шорткод WT_LOCATIONS (*Pro): Обновление аргументов list_tag и type_select_location.
     66* Шорткод WT_LOCATIONS (*Pro): Новый аргумент filter_parent.
     67* Yoast SEO (*Pro): Улучшена обработка стандартных и OpenGraph мета-данных.
     68* Yoast SEO (*Pro): Улучшена обработка канонических ссылок субдоменов.
     69* Yoast SEO (*Pro): Отключение отображение ссылок в мета-данных из кэша.
     70* Региональные директории в URL (*Pro): Изменение логики работы.
     71* robots.txt (*Pro): Доработка отображения активного доменного имени.
     72* robots.txt (*Pro): Поле ввода кода кода для всех субдоменов.
     73* Субдомены (*Pro): На основном домене отображаем регион без поддомена и со значением "По умолчанию"
     74* Субдомены (*Pro): Активация работы с кириллическим доменным именем.
     75* WooCommerce (*Pro): Доработка интерфейса панели управления ценами и запасами.
     76* WooCommerce (*Pro): Региональные запасы.
     77* WooCommerce (*Pro): Скрытие отсутствующих товаров в регионах.
     78* WooCommerce (*Pro): Фильтрация товара по региональным ценам.
     79* WooCommerce (*Pro): Поддержка вариативных товаров.
     80* Импорт (*Pro): Опция "Удалить теги HTML и PHP из строк"
     81* Импорт (*Pro): Доработка алгоритма
     82* Тестирование и отладка: Исправлена ошибка с выбором города.
     83* Тестирование и отладка (*Pro): Новые возможности.
     84
     85= 1.7.13 =
     86* Шорткод WT_LOCATIONS (*Pro): Исправлена ошибка с отображением 1 колонки.
     87* Шорткод WT_LOCATIONS (*Pro): Дополнительные параметры list_tag и url_path
     88* Совместимость с плагином Rank Math (*Pro): Поддержка шорткодов в мета-тегах title и description
     89* WooCommerce (*Pro): Взаимосвязь отображения товара с региональными запасами
     90
     91= 1.7.12 =
     92* Шорткод WT_LOCATIONS (*Pro): Исправлена ошибка с отображением 1 колонки.
     93* Шорткод WT_LOCATIONS (*Pro): Выбор вида данных сохраняемых в Cookie при выборе города методом JavaScript.
     94* WooCommerce (*Pro): Добавление запасов в регионах
     95* WooCommerce (*Pro): Добавление цены распродажи в регионах
     96* WooCommerce (*Pro): Заполнение полей Страна/Регион/Город значениями активного региона
     97* WtGtLocation (*Pro): Дополнительный параметр meta_query в функции getObjects()
     98* WtGtLocationDPD (*Pro): Взаимодействие с таблицей локаций службы доставки DPD
     99* Техничесике (*Pro): Удаление регионов во время деактивации плагина (при активации одноимённой настройки)
     100* Subdomain (*Pro): Проверка наличия PHP-модуля intl, необходимого для преобразования кириллических доменных имён
     101
     102= 1.7.11 =
     103* Шорткод WT_LOCATIONS (*Pro): Вывод списка городов для выбора города на сайтах с поддоменами.
     104* Шорткод WT_LOCATIONS (*Pro): Деление списка городов на колонки.
     105* Шорткод WT_LOCATIONS (*Pro): Маркировка активного города классом "active".
     106
    59107= 1.7.10 =
    60108* SEO (*Pro): Отключение/перезапись канонической ссылки в плагине Yoast SEO.
  • wt-geotargeting/trunk/wt_geotargeting.php

    r2369473 r2517233  
    44Plugin URI: https://web-technology.biz/cms-wordpress/plugin-wt-geotargeting
    55Description: Набор инструментов для настройки геотаргетинга.
    6 Version: 1.7.10
     6Version: 1.8
    77Author: Кусты Роман, АИТ "WebTechnology"
    88Author URI: https://web-technology.biz
     
    5656        require(WT_GT_PRO_PLUGIN_DIR . '/includes/wt_gt_admin.php');
    5757
     58        // Регистрация скриптов для админки
     59        add_action('admin_enqueue_scripts', array($this, 'registerAdminScripts'));
     60
    5861        $wt_gt_pro_admin = new WtGtAdmin();
    5962        $wt_gt_pro_admin->geotargeting = $this;
     
    7174
    7275    public function registerAdminScripts(){
     76        wp_register_script(
     77            'wt-geotargeting-admin',
     78            plugin_dir_url(WT_GT_PRO_PLUGIN_FILE) . '/js/admin.js',
     79            array('jquery'),
     80            '1.0.0'
     81        );
     82        wp_enqueue_script('wt-geotargeting-admin');
    7383    }
    7484}
Note: See TracChangeset for help on using the changeset viewer.