/* v8.84 — dedicated road translation with a second provider fallback. * Existing auto-imported Turkish cards are also retried, so the fix is not * limited to notices imported after this theme update. */ function trsk_roads_translate_ru($text){ $text=function_exists('trsk_jobs_clean_text') ? trsk_jobs_clean_text($text) : trim(wp_strip_all_tags((string)$text)); if($text==='') return ''; if(function_exists('trsk_jobs_has_russian') && trsk_jobs_has_russian($text) && (!function_exists('trsk_jobs_has_turkish_letters') || !trsk_jobs_has_turkish_letters($text))) return $text; $cache='trsk_rtr_v884_'.md5($text); $hit=get_transient($cache); if(is_string($hit) && $hit!=='') return $hit; // First use the site's normal translator (official Google key when configured, // otherwise the existing Google endpoint). if(function_exists('trsk_jobs_translate_ru')){ $out=trsk_jobs_translate_ru($text); if($out && preg_match('/[А-Яа-яЁё]/u',$out)){ set_transient($cache,$out,30*DAY_IN_SECONDS); return $out; } } // Independent fallback for road notices. This keeps roads translating when // the anonymous Google endpoint is temporarily blocked by the host/provider. $url='https://api.mymemory.translated.net/get?q='.rawurlencode(mb_substr($text,0,420,'UTF-8')).'&langpair=tr|ru'; $r=wp_remote_get($url,array('timeout'=>20,'redirection'=>3,'headers'=>array('Accept'=>'application/json'),'user-agent'=>'Mozilla/5.0 TRSKINFO/8.84')); if(!is_wp_error($r) && wp_remote_retrieve_response_code($r)===200){ $j=json_decode(wp_remote_retrieve_body($r),true); $out=html_entity_decode((string)($j['responseData']['translatedText']??''),ENT_QUOTES|ENT_HTML5,'UTF-8'); $out=function_exists('trsk_jobs_clean_text') ? trsk_jobs_clean_text($out) : trim(wp_strip_all_tags($out)); if($out && preg_match('/[А-Яа-яЁё]/u',$out)){ set_transient($cache,$out,30*DAY_IN_SECONDS); return $out; } } return ''; } function trsk_roads_v884_translate_existing(){ if(get_transient('trsk_roads_v884_translate_lock')) return; set_transient('trsk_roads_v884_translate_lock',1,10*MINUTE_IN_SECONDS); $ids=get_posts(array('post_type'=>'trsk_road','post_status'=>'publish','posts_per_page'=>20,'fields'=>'ids','meta_key'=>'_trsk_road_auto','meta_value'=>1,'orderby'=>'modified','order'=>'DESC')); foreach($ids as $id){ $name=(string)get_post_meta($id,'_trsk_road_name',true); $reason=(string)get_post_meta($id,'_trsk_road_reason',true); $new_name=$name; $new_reason=$reason; if($name && !preg_match('/[А-Яа-яЁё]/u',$name)){ $x=trsk_roads_translate_ru($name); if($x) $new_name=$x; } if($reason && (!preg_match('/[А-Яа-яЁё]/u',$reason) || preg_match('/[ÇĞİÖŞÜçğıöşü]/u',$reason))){ $x=trsk_roads_translate_ru($reason); if($x) $new_reason=$x; } if($new_name!==$name) update_post_meta($id,'_trsk_road_name',$new_name); if($new_reason!==$reason){ update_post_meta($id,'_trsk_road_reason',$new_reason); wp_update_post(array('ID'=>$id,'post_content'=>$new_reason)); } $title=get_the_title($id); if($title && !preg_match('/[А-Яа-яЁё]/u',$title)){ $x=trsk_roads_translate_ru($title); if($x) wp_update_post(array('ID'=>$id,'post_title'=>$x)); } } } // Disabled: legacy translation must be reviewed manually before applying. // Disabled: do not call external translation APIs on every page load. function trsk_roads_auto_admin_menu(){ add_submenu_page('edit.php?post_type=trsk_road','Автообновление дорог','Автообновление','manage_options','trsk-roads-refresh','trsk_roads_auto_admin_page'); } add_action('admin_menu','trsk_roads_auto_admin_menu'); function trsk_roads_auto_admin_page(){ if(!current_user_can('manage_options')) return; if(isset($_POST['trsk_roads_now'])&&check_admin_referer('trsk_roads_now')){ $n=trsk_roads_auto_refresh(); echo '

Проверка завершена. Добавлено: '.(int)$n.'

'; } $d=get_option('trsk_roads_auto_diag',array()); echo '

Автообновление дорог

Источники проверяются каждые 6 часов. Если WP-Cron пропустил запуск, при следующем посещении сайта автоматически ставится дополнительная проверка (не позднее чем после 8 часов без обновления).

'; wp_nonce_field('trsk_roads_now'); echo '
'; if($d){ echo '

Последняя диагностика

'; foreach($d as $n=>$x) echo ''; echo '
ИсточникДоступенНайдено ссылокДобавлено
'.esc_html($n).''.(!empty($x['ok'])?'да':'нет').''.(int)$x['links'].''.(int)$x['added'].'
'; } echo '
'; } /* v8.24 — Current Dipkarpaz / Zaferburnu notice surfaced on the road-news feed. * Seed it so the portal does not depend on the generic crawler recognising a tag page. */ function trsk_roads_upgrade_v824_dipkarpaz_notice(){ if(get_option('trsk_roads_content_version_824')==='done') return; $source='https://www.yeniduzen.com/yol-yapim-haberleri.htm'; $title='Dipkarpaz — Zafer Burnu'; $ids=get_posts(array('post_type'=>'trsk_road','post_status'=>'any','posts_per_page'=>10,'fields'=>'ids','s'=>$title)); $id=0; foreach($ids as $candidate){ $name=(string)get_post_meta($candidate,'_trsk_road_name',true); if(stripos($name,'Dipkarpaz')!==false && (stripos($name,'Zafer')!==false || stripos(get_the_title($candidate),'Zafer')!==false)){ $id=(int)$candidate; break; } } $postarr=array( 'post_type'=>'trsk_road','post_status'=>'publish','post_title'=>$title, 'post_content'=>'Участок дороги Dipkarpaz–Zaferburnu закрывается ежедневно на время асфальтирования. Ограничение действует до следующего уведомления.' ); if($id){ $postarr['ID']=$id; wp_update_post($postarr); } else $id=wp_insert_post($postarr); if($id && !is_wp_error($id)){ update_post_meta($id,'_trsk_road_district','Дипкарпаз / Карпаз'); update_post_meta($id,'_trsk_road_name','Dipkarpaz — Zafer Burnu'); update_post_meta($id,'_trsk_road_status','closed'); update_post_meta($id,'_trsk_road_start','2026-09-12T14:00'); update_post_meta($id,'_trsk_road_end',''); update_post_meta($id,'_trsk_road_hours','Ежедневно 14:00–20:00'); update_post_meta($id,'_trsk_road_reason','Асфальтирование дороги. Закрыто до следующего уведомления.'); update_post_meta($id,'_trsk_road_source',$source); update_post_meta($id,'_trsk_road_auto',1); } update_option('trsk_roads_content_version_824','done',false); } add_action('init','trsk_roads_upgrade_v824_dipkarpaz_notice',40); add_action('admin_init','trsk_roads_upgrade_v824_dipkarpaz_notice',40); /* v8.36 — translate legacy automatic road notices that were saved in Turkish. */ function trsk_roads_v836_translate_existing(){ if(get_option('trsk_roads_v836_ru_done')) return; if(!function_exists('trsk_jobs_translate_ru')) return; $ids=get_posts(array('post_type'=>'trsk_road','post_status'=>'publish','posts_per_page'=>80,'fields'=>'ids','meta_key'=>'_trsk_road_auto','meta_value'=>1)); foreach($ids as $id){ $title=get_the_title($id); $reason=(string)get_post_meta($id,'_trsk_road_reason',true); if($title && !trsk_jobs_has_russian($title)){ $ru=trsk_jobs_translate_ru($title); if($ru && trsk_jobs_has_russian($ru)){ wp_update_post(array('ID'=>$id,'post_title'=>$ru)); update_post_meta($id,'_trsk_road_name',$ru); } } if($reason && !trsk_jobs_has_russian($reason)){ $ru=trsk_jobs_translate_ru($reason); if($ru && trsk_jobs_has_russian($ru)){ update_post_meta($id,'_trsk_road_reason',$ru); wp_update_post(array('ID'=>$id,'post_content'=>$ru)); } } } update_option('trsk_roads_v836_ru_done',1,false); } // Disabled: one-off legacy translation should not run automatically. HALLOWEEN STREET PARTY | TRSKINFO
Дежурные аптекиОтключения светаОтключения водыВажные номераДорогиУслугиРаботаАфиша
Сейчас