Changeset 2517233
- Timestamp:
- 04/18/2021 08:42:08 PM (5 years ago)
- Location:
- wt-geotargeting/trunk
- Files:
-
- 2 added
- 9 edited
-
includes/SypexGeo.php (modified) (2 diffs)
-
includes/WtGeolocation.php (modified) (2 diffs)
-
includes/WtInitialization.php (modified) (1 diff)
-
includes/WtKit.php (modified) (9 diffs)
-
includes/wt_data_files.php (modified) (2 diffs)
-
includes/wt_gt_admin.php (modified) (11 diffs)
-
includes/wt_gt_admin_behavior.php (modified) (2 diffs)
-
js (added)
-
js/admin.js (added)
-
readme.txt (modified) (1 diff)
-
wt_geotargeting.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wt-geotargeting/trunk/includes/SypexGeo.php
r2322049 r2517233 11 11 public $ip; 12 12 13 public $apiKey = null; 13 public $server = 'api.sypexgeo.net'; 14 public $api_key = null; 14 15 15 16 public $error = false; … … 18 19 function getData(){ 19 20 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); 21 27 curl_setopt($ch, CURLOPT_HTTPGET , true); 22 28 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); -
wt-geotargeting/trunk/includes/WtGeolocation.php
r2322049 r2517233 24 24 public $options = array( 25 25 'base_name' => 'ipgeobase_service', 26 'sypexgeo_server' => 'api.sypexgeo.net', 27 'sypexgeo_api_key' => null, 26 28 'maxmind_language' => array('ru') 27 29 ); … … 210 212 $service = new SypexGeo(); 211 213 $service->ip = $this->ip; 214 $service->server = $this->options['sypexgeo_server']; 215 $service->api_key = $this->options['sypexgeo_api_key']; 212 216 $data_service = $service->getData(); 213 217 -
wt-geotargeting/trunk/includes/WtInitialization.php
r2292398 r2517233 201 201 function shortcodeGeotargetingAction($param, $content){ 202 202 203 204 203 205 // Определяем выводился-ли ранее контент для указанного типа, если да, то завершаем выполнение 204 206 if (isset($param['type']) && isset($this->record[$param['type']]) && -
wt-geotargeting/trunk/includes/WtKit.php
r2304169 r2517233 8 8 { 9 9 /** 10 * Объекты данных11 * 23.09.201612 */10 * Объекты данных 11 * 23.09.2016 12 */ 13 13 static $obj; 14 14 … … 22 22 static $geolocation; 23 23 24 static $cache_data; 25 24 26 protected static $instance; 25 27 … … 28 30 self::$obj = new stdClass; 29 31 self::$theme = new stdClass; 32 33 add_shortcode('wt_kit', array($this, 'shortcodeMain')); 30 34 } 31 35 … … 80 84 81 85 /** 82 * Вывод постов в виде выпадающего списка86 * Вывод постов в виде выпадающего списка 83 87 * Функция является модифицированной копией wp_dropdown_pages() 84 88 * 08.11.2016 85 89 */ 86 static function wp_dropdown_posts( $args = '' ) { 90 static function wp_dropdown_posts($args = '') 91 { 87 92 $defaults = array( 88 93 'post_type' => 'post', … … 104 109 ); 105 110 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); 109 114 110 115 // Удаляем HTML теги из заголовка 111 foreach ($posts as $post) {116 foreach ($posts as $post) { 112 117 $post->post_title = strip_tags($post->post_title); 113 118 } … … 115 120 $output = ''; 116 121 // 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'])) { 118 123 $r['select']['id'] = $r['name']; 119 124 } 120 125 121 if ( ! empty( $posts )) {126 if (!empty($posts)) { 122 127 $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']) . "'"; 125 130 } 126 131 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']) { 129 134 $output .= "\t<option value=\"-1\">" . $r['show_option_no_change'] . "</option>\n"; 130 135 } 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"; 133 138 } 134 $output .= walk_page_dropdown_tree( $posts, $r['depth'], $r);139 $output .= walk_page_dropdown_tree($posts, $r['depth'], $r); 135 140 $output .= "</select>\n"; 136 141 } 137 142 138 if ( $r['echo']) {143 if ($r['echo']) { 139 144 echo $output; 140 145 } … … 142 147 } 143 148 144 static function debugLogAdd($content = null){ 149 static function debugLogAdd($content = null) 150 { 145 151 // Имя файла с логами 146 152 $filename = WP_CONTENT_DIR . '/wt_debug.txt'; … … 150 156 $file_content .= PHP_EOL; 151 157 152 if (!empty($content)) {158 if (!empty($content)) { 153 159 $file_content .= $content; 154 160 $file_content .= PHP_EOL; … … 164 170 file_put_contents($filename, $file_content); 165 171 } 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 } 166 248 } 167 249 -
wt-geotargeting/trunk/includes/wt_data_files.php
r2289246 r2517233 6 6 class WtGtDataFiles 7 7 { 8 public $countries_list = array(); 9 8 10 function __construct(){ 9 11 if (class_exists('Wt')) Wt::setObject('data_files', $this); 10 12 } 11 13 … … 102 104 return $city_info; 103 105 } 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 } 104 132 } 105 ?> 133 134 new WtGtDataFiles(); -
wt-geotargeting/trunk/includes/wt_gt_admin.php
r2308191 r2517233 17 17 ); 18 18 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 19 37 var $debug_mode_array = array( 20 38 0 => 'Отключен', … … 124 142 125 143 $country_alpha2_items = $this->data->getCountriesForSelect(); 126 $country_alpha2_items = array _merge(array('' => 'Неизвестно'), $country_alpha2_items);144 $country_alpha2_items = array('' => 'Неизвестно') + $country_alpha2_items; 127 145 128 146 $city_items = $this->data->getCities(); 129 $city_items = array _merge(array('' => 'Неизвестно'), $city_items);147 $city_items = array('' => 'Неизвестно') + $city_items; 130 148 131 149 // $option_group, $option_name, $sanitize_callback … … 150 168 'desc' => 'Выберите сервис для определения месторасположения посетителя сайта' 151 169 ); 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']; 153 174 154 175 $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', 156 203 'id' => 'dadata_api_key', 157 204 'option_name' => 'wt_geotargeting_geobase', 158 'label_for' => 'dadata_api_key' 205 'label_for' => 'dadata_api_key', 206 'class' => 'dadata-settings' 159 207 ); 208 if ($db_geobase_name != 'dadata_service') $field_params['class'] .= ' hide-if-js'; 209 160 210 add_settings_field('dadata_api_key', 'DaData: API key', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params); 161 211 162 212 $field_params = array( 163 'type' => 'text', // тип213 'type' => 'text', 164 214 'id' => 'maxmind_user_id', 165 215 '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 168 221 add_settings_field('maxmind_user_id', 'MaxMind: User ID', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params); 169 222 170 223 $field_params = array( 171 'type' => 'text', // тип224 'type' => 'text', 172 225 'id' => 'maxmind_license_key', 173 226 '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 176 232 add_settings_field('maxmind_license_key', 'MaxMind: License key', array(&$this, 'displaySettings'), 'wt_geotargeting_geobase_page', 'wt_geotargeting_geobase', $field_params); 177 233 178 234 $field_params = array( 179 'type' => 'checkbox', // тип235 'type' => 'checkbox', 180 236 'id' => 'deactivate_auto_set_region_from_cookie', 181 237 'option_name' => 'wt_geotargeting_region', … … 186 242 187 243 $field_params = array( 188 'type' => 'checkbox', // тип244 'type' => 'checkbox', 189 245 'id' => 'deactivate_save_region_from_cookie', 190 246 'option_name' => 'wt_geotargeting_sistem', … … 202 258 203 259 $field_params = array( 204 'type' => 'text', // тип260 'type' => 'text', 205 261 'id' => 'city', 206 262 'option_name' => 'wt_geotargeting_default', … … 210 266 211 267 $field_params = array( 212 'type' => 'text', // тип268 'type' => 'text', 213 269 'id' => 'region', 214 270 'option_name' => 'wt_geotargeting_default', … … 218 274 219 275 $field_params = array( 220 'type' => 'text', // тип276 'type' => 'text', 221 277 'id' => 'district', 222 278 'option_name' => 'wt_geotargeting_default', … … 243 299 244 300 $field_params = array( 245 'type' => 'select', // тип301 'type' => 'select', 246 302 'id' => 'mode', 247 303 'option_name' => 'wt_geotargeting_debug', … … 253 309 254 310 $field_params = array( 255 'type' => 'text', // тип311 'type' => 'text', 256 312 'id' => 'ip', 257 313 'option_name' => 'wt_geotargeting_debug', … … 278 334 ); 279 335 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'));298 336 } 299 337 … … 316 354 echo '<p>Воспользовавшись нижепредставленными полями вы можете протестировать работу сайта от лица пользователей из других регионов.<br>Тестирование возможно только администратором сайта.</p>'; 317 355 } 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: 1234333 };334 // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php335 jQuery.post( ajaxurl, data, function(response) {336 alert(response);337 });338 }339 </script>340 <?php341 }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 }381 356 } 382 357 ?> -
wt-geotargeting/trunk/includes/wt_gt_admin_behavior.php
r2369473 r2517233 2 2 /** 3 3 * Шаблон для админок 4 * v.1 4 5 */ 5 6 class WtGtAdminBehavior … … 11 12 */ 12 13 function dataFilesInit(){ 13 14 14 if (!is_object($this->data)) $this->data = new WtGtDataFiles(); 15 15 } -
wt-geotargeting/trunk/readme.txt
r2369473 r2517233 57 57 58 58 == 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 59 107 = 1.7.10 = 60 108 * SEO (*Pro): Отключение/перезапись канонической ссылки в плагине Yoast SEO. -
wt-geotargeting/trunk/wt_geotargeting.php
r2369473 r2517233 4 4 Plugin URI: https://web-technology.biz/cms-wordpress/plugin-wt-geotargeting 5 5 Description: Набор инструментов для настройки геотаргетинга. 6 Version: 1. 7.106 Version: 1.8 7 7 Author: Кусты Роман, АИТ "WebTechnology" 8 8 Author URI: https://web-technology.biz … … 56 56 require(WT_GT_PRO_PLUGIN_DIR . '/includes/wt_gt_admin.php'); 57 57 58 // Регистрация скриптов для админки 59 add_action('admin_enqueue_scripts', array($this, 'registerAdminScripts')); 60 58 61 $wt_gt_pro_admin = new WtGtAdmin(); 59 62 $wt_gt_pro_admin->geotargeting = $this; … … 71 74 72 75 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'); 73 83 } 74 84 }
Note: See TracChangeset
for help on using the changeset viewer.