Cyr-To-Lat

Описание

Преобразует кириллические символы в ярлыках записей, страниц и рубрик в латинские. Полезно для создания URL-ов, легко читаемых людьми.

Особенности

  • Единственный плагин с полностью редактируемой таблицей транслитерации. Позволяет добавлять/удалять пары, например: ‘Я’ => ‘Ya’, или даже ‘Пиво’ => ‘Beer’
  • Конвертирует любое количество ярлыков существующих постов, страниц и терминов в фоновых процессах
  • Сохраняет целостность постоянных ссылок уже существующих записей и страниц
  • Выполняет транслитерацию названий файлов из вложений
  • Включает русские, белорусские, украинские, болгарские, македонские, сербские, греческие, армянские, грузинские, казахские, идиш и китайские символы
  • Имеет много преимуществ перед аналогичными плагинами
  • Официально совместим с WPML

Основано на оригинальном плагине Rus-To-Lat от Антона Скоробогатова.

Скриншоты

Установка

  1. Загрузите папку cyr2lat в директорию /wp-content/plugins/.
  2. Активируйте плагин на странице «Плагины» в панели управления WordPress.

Часто задаваемые вопросы

Как назначить свои правила для замены?

Добавьте этот код к файлу functions.php вашей темы:

/**
 * Modify conversion table.
 *
 * @param array $table Conversion table.
 *
 * @return array
 */
function my_ctl_table( $table ) {
   $table['Ъ'] = 'U';
   $table['ъ'] = 'u';

   return $table;
}

add_filter( 'ctl_table', 'my_ctl_table' );

Как я могу переопределить нестандартную локаль?

Например, если ваша нестандартная локаль uk_UA, вы можете переопределить её в uk добавлением следующего кода в function.php вашей темы:

/**
 * Use conversion table for non-standard locale.
 *
 * @param array $table Conversion table.
 *
 * @return array
 */
function my_ctl_table( $table ) {
    if ( 'uk_UA' === get_locale() ) {
        $settings = new Cyr_To_Lat_Settings();
        $table    = $settings->get_option( 'uk' );
    }

    return $table;
}

add_filter( 'ctl_table', 'my_ctl_table' );

Как я могу определить собственную транслитерацию заголовков?

Добавьте примерно такой код в functions.php вашей темы.

/**
* Filter title before sanitizing.
*
* @param string|false $result Sanitized title.
* @param string       $title  Title.
*
* @return string|false
*/
function my_ctl_pre_sanitize_title( $result, $title ) {
    if ( 'пиво' === $title ) {
        return 'beer';
    }

    return $result;
}

add_filter( 'ctl_pre_sanitize_title', 10, 2 );

Как вы могу определить собственную транслитерацию имён файлов?

Добавьте примерно такой код в functions.php вашей темы.

/**
* Filter filename before sanitizing.
*
* @param string|false $result   Sanitized filename.
* @param string       $filename Title.
*
* @return string|false
*/
function my_ctl_pre_sanitize_filename( $result, $filename ) {
    if ( 'пиво' === $filename ) {
        return 'beer';
    }

    return $result;
}

add_filter( 'ctl_pre_sanitize_filename', 10, 2 );

Как я могу ограничить типы постов для фоновой конвертации?

Добавьте примерно такой код в functions.php вашей темы.

/**
* Filter post types allowed for background conversion.
*
* @param array $post_types Allowed post types.
*
* @return array
*/
function my_ctl_post_types( $post_types ) {
    return [
    'post'          => 'post',
    'page'          => 'page',
    'attachment'    => 'attachment',
    'product'       => 'product',
    'nav_menu_item' => 'nav_menu_item',
    ];
}

add_filter( 'ctl_post_types', 'my_ctl_post_types' );

Как я могу сконвертировать много постов/терминов, используя wp-cli?

Используйте следующую команду в консоли:

wp cyr2lat regenerate [--post_type=<post_type>] [--post_status=<post_status>]

Где
-post_type список типов постов,
-post_status список статусов постов.

Могу ли я внести свой вклад?

Да, вы можете!

Отзывы

16.12.2020
Запустил преобразование по готовым постам, в итоге проект убило. Неделю делал, и всё потеряно по клику кнопкой... Бэкап не сделал, потому что не предполагал, что простейший плагин может убить всё. Больше 10 лет сидел на rus-to-lat без проблем... Этот плагин явно что-то делает помимо URL и имен картинок! У меня было всего несколько страниц с кириллическим именем и ни одной картинки. В проекте используется Elementor. Так вот Elementor сдох, я не могу отредактировать НИ ОДИН пост, даже те которые были на латинских именах. Я не представляю куда мог залезть Cyr-To-Lat! На кириллице было только несколько URL постов и всё. Если бы он поменял только это, проблем бы не было. Я в шоке, это не объяснить даже словами... Ни слова предупреждений ни внутри ни тут в описании....
09.12.2020
Не хватает стабильности, так как с последней обновой рухнул сайт с ошибками [Tue Dec 08 17:27:52.666279 2020] [fcgid:warn] [pid 19343] [client 37.214.80.207:37526] mod_fcgid: stderr: PHP Warning: require(/var/www/www-root/data/www/____/wp-content/plugins/cyr2lat/vendor/composer/../ralouphie/getallheaders/src/getallheaders.php): failed to open stream: No such file or directory in /var/www/www-root/data/www/____/wp-content/plugins/cyr2lat/vendor/composer/autoload_real.php on line 69, referer: https://____/ [Tue Dec 08 17:27:52.666319 2020] [fcgid:warn] [pid 19343] [client 37.214.80.207:37526] mod_fcgid: stderr: PHP Fatal error: require(): Failed opening required '/var/www/www-root/data/www/____/wp-content/plugins/cyr2lat/vendor/composer/../ralouphie/getallheaders/src/getallheaders.php' (include_path='.:/opt/php73/share/pear') in /var/www/www-root/data/www/____/wp-content/plugins/cyr2lat/vendor/composer/autoload_real.php on line 69, referer: https://____ поэтому срочно пришлось лезть на сервер удалять, и ставить прошлую версию или искать замену также, словарь есть, но еще хотелось бы маппинг слов, например именно слово виталюр нужно трансформировать не vita, это как пример
24.10.2020
Добрый день! С некоторых пор перестал правиьно переводить русские символы. Например, "ы" не переводит совсем. Нашла ответ на похожий вопрос раньше, надо добавить код: function my_cyr_to_lat_table( $ctl_table ) { $ctl_table['Ы'] = 'Y'; $ctl_table['ы'] = 'y'; $ctl_table['Ъ'] = ''; $ctl_table['ъ'] = ''; $ctl_table['Ё'] = 'YO'; $ctl_table['ё'] = 'yo'; return $ctl_table; } add_filter( 'ctl_table', 'my_cyr_to_lat_table' ); Но это не решает проблему. Буква "и" в русском языке должна преобразовываться в "i", а в украинском - в "y". Как это исправить? Еще буква "г" в русском - "g", в украинском - "h", но это - мелочи по сравнению с "и". Спасибо!
Посмотреть все 66 отзывов

Участники и разработчики

«Cyr-To-Lat» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

Участники

«Cyr-To-Lat» переведён на 8 языков. Благодарим переводчиков за их работу.

Перевести «Cyr-To-Lat» на ваш язык.

Заинтересованы в разработке?

Посмотрите код, проверьте SVN репозиторий, или подпишитесь на журнал разработки по RSS.

Журнал изменений

4.6.4 (03.03.2021)

  • Протестировано до WordPress 5.7

4.6.3 (21.02.2021)

  • Исправлена ошибка с типом поста attachment, отфильтрованным ‘ctl_post_types’.
  • Исправлена ошибка с фоновой конвертацией терминов атрибутов товаров.

4.6.2 (11.02.2021)

  • Исправлена ошибка с несуществующие функцией PLL().

4.6.1 (10.02.2021)

  • Исправлена ошибка с Polylang.

4.6.0 (10.02.2021)

  • Добавлена совместимость с Polylang.
  • Добавлен попап подтверждения перед массовой конвертацией слагов.
  • Улучшена выборка постов и терминов для конвертации во избежание выборки лишних элементов при массовой конвертации слагов.
  • Исправлена ошибка с редиректом со старых слагов но новые после фоновой конвертации слагов.
  • Исправлен код js для совместимости со старыми браузерами типа IE

4.5.2 (08.12.2020)

  • Исправлена ошибка с деплоем на wp.org.

4.5.1 (07.12.2020)

  • Протестировано с WordPress 5.6
  • Протестировано на PHP 5.6-8.0

4.5.0 (18.05.2020)

  • Добавлены греческий и армянский языки
  • Добавлена фоновая конвертация вложений и миниатюр
  • Исправлено фоновое конвертирование существующих слагов

4.4.0 (18.04.2020)

  • Полная гибкость в редактировании таблицы транслитерации: теперь возможно добавлять/удалять пары на странице настроек
  • Возвожность редактирования не только значений, но и ключей в таблице транслитерации
  • Сохранение активной таблицы через ajax
  • Отслеживание изменений в активной таблице
  • Авто-сохранение настроек
  • Информация о текущей локали на странице настроек
  • Активация таблицы текущей локали во время загрузки страницы настроек
  • Добавлен китайский язык
  • Исправлено: ярлык не обновлялся при создании копии товара woocommerce

4.3.5 (28.03.2020)

  • Протестировано с WordPress 5.4
  • Исправлена ошибка с исчезновением атрибутов WooCommerce

4.3.4 (22.02.2020)

  • Исправлено не-преобразование ярлыков с WPML
  • Ограничена конвертация постов: теперь только публичные и nav_menu_item
  • Добавлен фильтр ctl_post_types

4.3.3 (20.02.2020)

  • Переработан основной фильтр плагина
  • Улучшено быстродействие путём минимизации числа вызовов
  • Исправлена таблица грузинского языка
  • Исправлено дублирование ярлыков в таксономиях
  • Исправлено предупреждение с WooCommerce, когда mbstring не загружена
  • Исправлена транслитерация ярлыка черновика поста
  • Таблицы сортированы по локальному алфавиту

4.3.2 (29.12.2019)

  • Исправлена проблема с установкой max_input_vars на некоторых хостингах

4.3.1 (27.12.2019)

  • Добавлено требование иметь max_input_vars >= 5000
  • Добавлена автоматическая деактивация плагина, если требования не соблюдены
  • Добавлена попытка авто-коррекции значения max_input_variable

4.3 (14.12.2019)

  • Добавлена поддержка китайского языка
  • Протестировано до WordPress 5.3
  • Протестировано до PHP 7.4
  • Внешняя библиотека `wp-background-processing` спрятана под неймспейс плагина, чтобы избежать ошибок в некоторых кейсах

4.2.3 (29.08.2019)

  • Полифил Symphony Mbstring перенесён в собственное пространство имён, чтобы избежать проблем с автозагрузкой composer на некоторых сайтах.

4.2.2 (28.08.2019)

  • Добавлена поддержка плагина ACF (Advanced Custom Fields)
  • Добавлена поддержка сербского языка
  • Добавлен новый фильтр ctl_pre_sanitize_filename
  • Исправлена неверная конвертация букв Ё, ё, Й, й в названиях файлов под операционной системой Mac (старая известная проблема Mac’ов)

4.2.1 (23.06.2019)

  • Исправлена проблема с сессиями
  • Исправлена последовательность сообщений при конвертации существующих ярлыков.
  • Добавлена проверка версии PHP для избежания фатальной ошибки при активации на старых сайтах.
  • Добавлены вертикальные табы в настройках плагина.

4.2 (28.05.2019)

  • Минимально необходимая версия php поднята до 5.6
  • Добавлены phpunit-тесты для всех версий php от 5.6 до 7.3
  • Устранено предупреждение php во время конвертации существующих ярлыков
  • Исправлен выбор локали при конвертации существующих ярлыков записей, когда активирован WPML
  • Исправлена ошибка с бесконечной переадресацией некоторых ярлыков после конвертации существующих ярлыков

4.1.2 (22.05.2019)

  • Исправлена фатальная ошибка в Cyr_To_Lat_Converter с php 5.2

4.1.1 (22.05.2019)

  • Исправлена фатальная ошибка в Cyr_To_Lat_Converter с php 5.6

4.1 (21.05.2019)

  • Добавлена таблица he_IL
  • Добавлен перевод плагина на украинский
  • Добавлен перевод плагина на шведский
  • Добавлены phpunit-тесты. Все классы плагина покрыты на 100%
  • Добавлены js-тесты. Весь js-код плагина покрыт на 100%
  • Исправлена ошибка с синхронизацией Jetpack
  • Исправлена ошибка с пустыми слагами при использовании символов вне локали

4.0 (24.04.2019)

  • Добавлена кнопка для конвертации существующих ярлыков, вместо чекбокса
  • Добавлены уведомления в консоли во время конвертации существующих ярлыков
  • Добавлены параметры post_type и post_status в команду wp-cli
  • Исправлен текстовый домен
  • Упрощён package.json, чтобы сделать финальный js ещё меньше
  • Добавлены phpunit-тесты для главного класса плагина
  • Добавлен travis.yml для непрерывной интеграции на GitHub, и улучшения надёжности кода

3.7 (12.04.2019)

  • Добавлены белорусская, македонская и казахская таблицы
  • Исправлена ошибка с MariaDB во время конвертации существующих ярлыков
  • Исправлено: не сохранялись пользовательские правки в дефолтной таблице iso9

3.6.5 (11.02.2019)

  • Добавлены очереди для процесса фоновой ковертации существующих ярлыков

3.6.4 (06.02.2019)

  • Исправлена ошибка с редиректом _wp_old_slug
  • Исправлена ошибка с urldecode в постах.

3.6.3 (04.02.2019)

  • Исправлена ошибка с активацией по сети для мультисайта

3.6.2 (01.02.2019)

  • Меню перемещено в секцию Настройки.
  • Исправлен текстовый домен.

3.6.1 (31.01.2019)

  • Текстовый домен скорректирован.

3.6 (31.01.2019)

  • Добавлена страница настроек плагина.
  • Страница настроек позволяет редактировать таблицы конвертации онлайн.
  • Код сконвертирован в ООП.
  • Произведён рефакторинг кода в соответствии со стандартами кодирования WordPress.
  • JS разработан в соответствии со стандартом ECMA-6.
  • Страница настроек также работает при выключенном JS в браузере.
  • Добавлены composer и yarn.
  • Добавлены ресурсы (баннер, иконка, административная иконка).

3.4 (21.01.2019)

  • Протестировано до WP 5.1
  • Форматирование кода по WPCS.
  • Строгое соответствие.
  • Фигурные скобки {} удалены из оператора MySQL, чтобы разрешить проверку имён таблиц в PhpStorm.
  • Обновлены .gitignore и README.md
  • Добавлен новый фильтр ctl_pre_sanitize_title

3.3 (18.01.2019)

  • wpcs 1.0
  • Исправлено много ошибок
  • Добавлена поддержка Gutenberg

3.2

  • Добавлена транслитерация при публикации через XML-RPC
  • Исправлена ошибка «неправильная таксономия» при просмотре часто используемых тегов

3.1

  • Исправлена транслитерация при сохранении черновика

3.0

  • Добавлена автоматическая конвертация ярлыков существующих постов, страниц и терминов
  • Добавлено сохранение существующих постов и интеграция с постоянными ссылками страниц
  • Добавлена транслитерация имён файлов вложений
  • Таблица транслитерации обновлена в соответствии со стандартом ISO9
  • Включает белорусские, украинские, болгарские и греческие символы
  • Добавлен фильтр для таблицы транслитерации

2.1

  • Оптимизирован вызов фильтра

2.0

  • Добавлены проверки существующих терминов

1.0.1

  • Обновлено описание

1.0

  • Релиз первой версии плагина.