/* 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.'
Источники проверяются каждые 6 часов. Если WP-Cron пропустил запуск, при следующем посещении сайта автоматически ставится дополнительная проверка (не позднее чем после 8 часов без обновления).
'; if($d){ echo '| Источник | Доступен | Найдено ссылок | Добавлено |
|---|---|---|---|
| '.esc_html($n).' | '.(!empty($x['ok'])?'да':'нет').' | '.(int)$x['links'].' | '.(int)$x['added'].' |