Плагин Cyr-To-Lat разработан для транслитерации кириллических символов в ссылках в латинские символы. Хотя я всегда пользовался плагином Rus-To-Lat, и даже не подозревал, что есть более интересный и более лёгкий функционал для этих, необходимых каждому блогеру, целей. Плагин Cyr-To-Lat имеет несколько функций, которых нет в Rus-To-Lat. Сейчас мы их рассмотрим, но сначала об установке и настройке – это займёт немного времени и вашего внимания.

Установка плагина происходит так же, как обычно, но намного быстрее и легче другой способ — скачать плагин с официального хранилища плагинов WordPress, а установка плагина пройдёт в автоматическом режиме – вам нужно будет только активировать плагин, а настроек он не требует, кроме некоторых изменений в шаблоне.

Плагин начинает функционировать сразу после активации и настроек не требует, можно только внести некоторые изменения в файл functions.php. Их мы рассмотрим ниже, а теперь несколько слов о тех функциях, которых нет в Rus-To-Lat:

  • Плагин автоматически после активации преобразует все русские ссылки к записям, меткам и страницам. Для только что созданного блога это преобразование не столь важно, но для тех сайтов, в которых надо преобразовывать несколько сотен (а то и тысяч) страниц с русскоязычными ссылками плагин Cyr-To-Lat будет незаменимым.
  • После конвертации работоспособность старых русскоязычных ссылок будет сохранена, а точнее, пользователь будет перенаправлен со старых адресов на новые. Перенаправление будет осуществляться через 301 редирект ,что очень хорошо для оптимизации сайта, так как не теряется вес ссылок. То есть с точки зрения SEO-оптимизиции ваш ресурс не пострадает.
  • Плагин также проводит транслитерацию названий загружаемых файлов. Так, при загрузке изображения с названием «Блог.gif» вы увидите медиафайл с именем «Блог» и ярлыком «Blog.gif».
  • Плагин Cyr-To-Lat включает в себя символы русского, украинского, белорусского, македонского и болгарского языков.
  • В плагин добавлен фильтр изменения транслитерации. Можно и вручную изменить таблицу в плагине, но фильтром быстрее и надёжнее, потому что при обновлении плагина вам не придётся снова его подправлять. Пользоваться этим фильтром легко — нужно открыть файл functions.php вашей текущей темы и добавить туда код перед закрывающим слэшем ?>:
 function my_cyr_to_lat_table($ctl_table) {
   $ctl_table['Ы'] = 'Y';
   $ctl_table['ы'] = 'y';
   return $ctl_table;
}
add_filter('ctl_table', 'my_cyr_to_lat_table'); 

Этот код поменяет транслитерацию символов «Ы» и «ы» на «Y» и «y» (по умолчанию эти символы плагин меняет на «YI» и «yi», что, на мой взгляд). Можно также добавить[‘Ь’] = [‘I’].

  • Транслитерация будет функционировать и при публикации через сервис XML-RPC, что для многих важно – публикации с бирж статей или публикации через клиент Windows Live Writer.

Никакой лишней нагрузки на блог плагин не произведёт, так как его код даже легче, чем у Rus-To-Lat.

Перед активацией плагина сделайте на всякий случай бекап БД. Потому что после активации плагин преобразует ссылки на сайте, и если вы потом удалите плагин, то ссылки уже не вернутся. Хотя существует небольшой хак по этому поводу, который поможет вам избежать неожиданностей.  Для этого необходимо создать новый файл regenerate-slugs.php в корневом каталоге вашего сайта, скопировать в этот плагин код, который вы видите ниже, и запустить этот файл из адресной строки вашего браузера. Если к моменту выполнения этого скрипта плагин ещё работает, то восстанавливаются только те ссылки, которые преобразовались в автоматическом режиме, а ссылки, которые были указаны вручную или изменены, остаются. Вот код:

 <?php
require 'wp-load.php';

$cyr2lat_enabled = false;
if ( function_exists('ctl_sanitize_title') ) {
	remove_filter('sanitize_title', 'ctl_sanitize_title', 9);
	$cyr2lat_enabled = true;
}

echo "Regenerating post slugs...<br />\n";
$posts = $wpdb->get_results("SELECT ID, post_title, post_name FROM {$wpdb->posts} WHERE post_status = 'publish'");
foreach ( (array) $posts as $post ) {
	$original_name = sanitize_title($post->post_title);
	$sanitized_name = $cyr2lat_enabled ? ctl_sanitize_title( urldecode($original_name) ) : '';
	if ( $post->post_name == $sanitized_name || empty($sanitized_name) ) {
		delete_post_meta($post->ID, '_wp_old_slug', $original_name);
		$wpdb->update( $wpdb->posts, array( 'post_name' => $original_name ), array( 'ID' => $post->ID ) );
	}
}

echo "Regenerating term slugs...<br />\n";
$terms = $wpdb->get_results("SELECT term_id, name, slug FROM {$wpdb->terms}");
foreach ( (array) $terms as $term ) {
	$original_slug = sanitize_title($term->name);
	$sanitized_slug = $cyr2lat_enabled ? ctl_sanitize_title( urldecode($original_slug) ) : '';
	if ( $term->slug == $sanitized_slug || empty($sanitized_slug) ) {
		$wpdb->update( $wpdb->terms, array( 'slug' => $original_slug ), array( 'term_id' => $term->term_id ) );
	}
}

echo 'All done!';
?>