Cyr-To-Lat

Описание

Converts Cyrillic characters in post, page, and term slugs to Latin characters. Useful for creating human-readable URLs.

Особенности

  • The only plugin with a fully editable transliteration table. Allows adding/removing and editing pairs like ‘Я’ => ‘Ya’, or even ‘Пиво’ => ‘Beer’
  • Converts post, page, custom post type, and term slugs through explicit WordPress save and REST/Gutenberg paths
  • Converts any number of existing post, page, and term slugs in background processes or with WP-CLI
  • Сохраняет целостность постоянных ссылок уже существующих записей и страниц
  • Выполняет транслитерацию названий файлов из вложений
  • Supports WooCommerce product, product taxonomy, global attribute, local attribute, variation, and frontend cart slug flows without automatic migration of existing attributes
  • Плагин поддерживает русские, белорусские, украинские, болгарские, македонские, сербские, греческие, армянские, грузинские, казахские, ивритские и китайские символы.
  • Имеет много преимуществ перед аналогичными плагинами
  • Официально совместим с WPML

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

Спонсируется проектом Blackfire.

Поддержка плагина

Скриншоты

  • Страница опций таблиц
  • Страница опций конвертера
  • Блочный редактор с транслитерированным слагом
  • Сертификат WPML

Установка

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

Upgrade notes for 7.0

Version 7.0 is an architecture-focused release. It keeps the existing transliteration table, locale filters, post and term conversion tools, and WP-CLI command stable while moving slug handling to explicit services.

Existing posts, pages, terms, filenames, and WooCommerce product data are not destructively rewritten during the plugin upgrade. Use the Converter page or wp cyr2lat regenerate when you intentionally want to regenerate existing post and term slugs.

WooCommerce attributes created before 7.0 are not automatically migrated. Existing global pa_* taxonomies and existing local or variation attribute keys should be reviewed separately; any future migration must use a dedicated dry-run-first workflow.

Cyr-To-Lat 7.0.1 keeps legacy WooCommerce local variation attributes, including Any variations, aligned between the product form, add-to-cart request, and cart session.

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

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

Добавьте этот код к файлу 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 non-standard locale.
 *
 * @param string $locale Current locale.
 *
 * @return string
 */
function my_ctl_locale( $locale ) {
    if ( 'uk_UA' === $locale ) {
        return 'uk';
    }

    return $locale;
}
add_filter( 'ctl_locale', 'my_ctl_locale' );

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

Добавьте примерно такой код в 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 );

How can I control the legacy sanitize_title bridge?

Version 7.0 uses explicit slug handlers for posts, terms, WooCommerce attributes, and other known save paths. A legacy sanitize_title bridge remains as a compatibility fallback for broad calls that older integrations may still rely on.

You can disable the broad fallback with this code:

add_filter( 'ctl_enable_legacy_sanitize_title_bridge', '__return_false' );

The filter receives the current default value, $title, $raw_title, and $context. Explicit known contexts, such as WordPress save handling, continue to use the dedicated 7.0 slug paths.

For debugging unknown bridge calls, define CYR_TO_LAT_DEBUG_LEGACY_SANITIZE_TITLE_BRIDGE as true. This diagnostic log is disabled by default and is not enabled by WP_DEBUG.

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

Добавьте примерно такой код в 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 );

Как я могу разрешить плагину работать на фронтенде?

Добавьте следующий код в основной файл вашего плагина (или mu-плагина). Этот код не будет работать, если добавить его в файл functions.php темы.

/**
 * Filter status allowed Cyr To Lat plugin to work.
 *
 * @param bool $allowed
 *
 * @return bool
 */
function my_ctl_allow( bool $allowed ): bool {
    $uri = isset( $_SERVER['REQUEST_URI'] ) ?
        sanitize_url( wp_unslash( $_SERVER['REQUEST_URI'] ) ) :
        '';

    if ( 0 === strpos( $uri, '/divi-comments' ) ) {
        return true;
    }

    return $allowed;
}

add_filter( 'ctl_allow', 'my_ctl_allow' );

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

Добавьте примерно такой код в 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 список статусов постов.

What WooCommerce attribute behavior is supported in 7.0?

Cyr-To-Lat 7.0 explicitly handles new and updated WooCommerce product slugs, product category and tag slugs, global attribute slugs, global attribute term slugs, local product attribute keys, variation attribute keys, frontend add-to-cart requests, cart session loading, REST/API saves, and admin save flows.

Existing WooCommerce attributes are not automatically migrated during plugin upgrade. This means existing global pa_* taxonomies, local product attribute keys, and variation attribute keys keep their current stored values until you intentionally change them. A future migration tool should be separate and dry-run-first so store owners can review the impact before any rewrite.

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

Регенерация миниатюр командой wp media regenerate может сломать ссылки в старых постах, потому что имена файлов транлитерируются.

Во избежание этого, отключите плагин cyr2lat во время регенерации:

wp media regenerate --skip-plugins=cyr2lat

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

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

Куда мне сообщить об ошибках безопасности, обнаруженных в этом плагине?

Please report security vulnerabilities by email to:

[email protected]

When reporting a vulnerability, please include as much information as possible to help us reproduce and investigate the issue, such as:

  • A clear description of the vulnerability
  • Steps to reproduce
  • Proof-of-concept or exploit code (if available)
  • Affected versions

We will review your report and respond as quickly as possible.

Отзывы

12.05.2026 5 ответов
Cyr-To-Lat Версия 6.7.0 не работает при создании и быстром редактировании категории woocommerce в шаблоне woodmart (тестировалось с 8.3.9 и 8.4.1), при обычном редактировании все корректно. Предыдущая версия Cyr-To-Lat 6.6.0 функционировала без проблем. P.S. в версии 6.8.0 все исправлено.
06.05.2024 2 ответа
The plugin supports Russian, Belorussian, Ukrainian, Bulgarian, Macedonian, Serbian and Kazakh characters. Unfortunately, support for other languages (Greek, Armenian, Georgian, Hebrew, and Chinese) does not work at all.
12.02.2024 1 ответ
С последним обновлением стали корректно работать ранее созданные атрибуты, раньше после выгрузки отключал плагин, сейчас работает как надо. Спасибо!
15.10.2023 3 ответа
Плагин отличный (6.0.5), транслитерировал урлы (слаги для продвинутых) записей, страниц и меню и всего остального.Обратите внимание, что транслитерацию урлов всех меток (/tag/) и категорий (/category/) он тоже сделает, а в настройках нет отдельных пунктов отвечающих за метки и категории.
Посмотреть все 98 отзывов

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

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

Участники

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

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

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

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

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

7.0.2 (24.05.2026)

  • Fixed legacy WooCommerce local variation attributes with punctuation in attribute names after upgrading from versions before 7.0.

7.0.1 (20.05.2026)

  • Changed legacy sanitize_title bridge diagnostics to use the dedicated CYR_TO_LAT_DEBUG_LEGACY_SANITIZE_TITLE_BRIDGE constant instead of WP_DEBUG.
  • Fixed legacy WooCommerce local variation attributes, including Any variations, after upgrading from versions before 7.0.
  • Fixed duplicate WooCommerce product slugs when an existing product is updated with an empty slug.

7.0.0 (18.05.2026)

  • Refactored slug handling into explicit services for posts, terms, filenames, WooCommerce attributes, variation attributes, background conversion, and WP-CLI paths.
  • Improved Gutenberg coverage through REST/backend slug handling.
  • Improved WooCommerce support for product, taxonomy, global attribute, local attribute, variation, frontend cart, REST/API, and admin save flows.
  • Added the ctl_enable_legacy_sanitize_title_bridge compatibility filter for broad legacy sanitize_title behavior.
  • Documented that existing WooCommerce attributes are not automatically migrated in 7.0; future migration work must be a separate dry-run-first workflow.
  • Documented the backend-first testing strategy without required Codeception or Playwright release dependencies.

См. журнал изменений для всех версий.