{"id":449,"date":"2008-02-02T15:43:46","date_gmt":"2008-02-02T15:43:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/cyr2lat\/"},"modified":"2026-05-20T16:55:17","modified_gmt":"2026-05-20T16:55:17","slug":"cyr2lat","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/cyr2lat\/","author":297445,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"7.0.1","stable_tag":"7.0.1","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Cyr-To-Lat","header_author":"Sergey Biryukov, Mikhail Kobzarev, Igor Gergel","header_description":"","assets_banners_color":"0e405a","last_updated":"2026-05-20 16:55:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/kagg.eu\/cyr-to-lat\/","header_author_uri":"https:\/\/profiles.wordpress.org\/sergeybiryukov\/","rating":4.7,"author_block_rating":0,"active_installs":300000,"downloads":3336357,"num_ratings":98,"support_threads":12,"support_threads_resolved":11,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"SergeyBiryukov","date":"2010-10-21 14:18:00"},"1.0.1":{"tag":"1.0.1","author":"SergeyBiryukov","date":"2010-10-21 14:18:00"},"2.0":{"tag":"2.0","author":"SergeyBiryukov","date":"2010-10-21 14:18:00"},"2.1":{"tag":"2.1","author":"SergeyBiryukov","date":"2010-10-21 14:18:00"},"3.0":{"tag":"3.0","author":"SergeyBiryukov","date":"2010-12-13 15:23:57"},"3.1":{"tag":"3.1","author":"SergeyBiryukov","date":"2010-12-13 15:23:57"},"3.2":{"tag":"3.2","author":"Atrax","date":"2018-12-10 23:34:05"},"3.3":{"tag":"3.3","author":"mihdan","date":"2019-01-18 14:43:45"},"3.4":{"tag":"3.4","author":"mihdan","date":"2019-01-21 19:16:42"},"3.6.1":{"tag":"3.6.1","author":"mihdan","date":"2019-01-31 18:17:56"},"3.6.2":{"tag":"3.6.2","author":"mihdan","date":"2019-02-01 16:02:41"},"3.6.3":{"tag":"3.6.3","author":"mihdan","date":"2019-02-04 12:10:22"},"3.6.4":{"tag":"3.6.4","author":"mihdan","date":"2019-02-06 17:25:43"},"3.6.5":{"tag":"3.6.5","author":"mihdan","date":"2019-03-18 08:54:30"},"3.7":{"tag":"3.7","author":"mihdan","date":"2019-04-24 05:57:01"},"4.0":{"tag":"4.0","author":"mihdan","date":"2019-04-26 11:10:51"},"4.1":{"tag":"4.1","author":"mihdan","date":"2019-05-21 14:41:26"},"4.1.1":{"tag":"4.1.1","author":"SergeyBiryukov","date":"2019-05-21 21:26:27"},"4.1.2":{"tag":"4.1.2","author":"SergeyBiryukov","date":"2019-05-21 23:44:49"},"4.2":{"tag":"4.2","author":"mihdan","date":"2019-05-28 16:47:02"},"4.2.1":{"tag":"4.2.1","author":"mihdan","date":"2019-06-27 10:18:32"},"4.2.2":{"tag":"4.2.2","author":"mihdan","date":"2019-08-28 15:09:21"},"4.2.3":{"tag":"4.2.3","author":"SergeyBiryukov","date":"2019-12-07 00:06:56"},"4.3":{"tag":"4.3","author":"mihdan","date":"2019-12-20 20:28:11"},"4.3.1":{"tag":"4.3.1","author":"mihdan","date":"2019-12-28 15:21:34"},"4.3.2":{"tag":"4.3.2","author":"mihdan","date":"2019-12-29 16:13:24"},"4.3.3":{"tag":"4.3.3","author":"mihdan","date":"2020-02-20 08:10:45"},"4.3.4":{"tag":"4.3.4","author":"mihdan","date":"2020-02-24 07:26:02"},"4.3.5":{"tag":"4.3.5","author":"mihdan","date":"2020-03-30 08:56:53"},"4.4.0":{"tag":"4.4.0","author":"mihdan","date":"2020-04-20 09:34:43"},"4.5.0":{"tag":"4.5.0","author":"mihdan","date":"2020-05-19 21:08:39"},"4.5.1":{"tag":"4.5.1","author":"mihdan","date":"2020-12-08 16:21:40"},"4.5.2":{"tag":"4.5.2","author":"mihdan","date":"2020-12-08 16:21:40"},"4.6.0":{"tag":"4.6.0","author":"mihdan","date":"2021-02-10 13:52:00"},"4.6.1":{"tag":"4.6.1","author":"mihdan","date":"2021-02-10 20:55:29"},"4.6.2":{"tag":"4.6.2","author":"mihdan","date":"2021-02-11 15:05:13"},"4.6.3":{"tag":"4.6.3","author":"mihdan","date":"2021-02-21 12:59:20"},"4.6.4":{"tag":"4.6.4","author":"mihdan","date":"2021-03-03 14:30:22"},"5.0.0":{"tag":"5.0.0","author":"mihdan","date":"2021-03-18 15:41:51"},"5.0.1":{"tag":"5.0.1","author":"mihdan","date":"2021-03-22 16:22:21"},"5.0.2":{"tag":"5.0.2","author":"mihdan","date":"2021-03-27 16:34:13"},"5.0.3":{"tag":"5.0.3","author":"mihdan","date":"2021-04-02 21:13:52"},"5.0.4":{"tag":"5.0.4","author":"mihdan","date":"2021-04-17 17:00:15"},"5.1.0":{"tag":"5.1.0","author":"mihdan","date":"2021-07-20 06:43:38"},"5.2.0":{"tag":"5.2.0","author":"mihdan","date":"2021-07-27 16:02:16"},"5.2.2":{"tag":"5.2.2","author":"mihdan","date":"2021-09-06 13:20:10"},"5.2.3":{"tag":"5.2.3","author":"mihdan","date":"2021-09-07 13:44:23"},"5.2.4":{"tag":"5.2.4","author":"mihdan","date":"2021-09-07 18:16:12"},"5.2.5":{"tag":"5.2.5","author":"mihdan","date":"2021-12-19 21:48:52"},"5.2.6":{"tag":"5.2.6","author":"mihdan","date":"2021-12-25 16:12:37"},"5.2.7":{"tag":"5.2.7","author":"mihdan","date":"2022-02-14 15:04:45"},"5.3.0":{"tag":"5.3.0","author":"mihdan","date":"2022-08-01 13:36:45"},"5.4.0":{"tag":"5.4.0","author":"mihdan","date":"2022-12-15 11:25:56"},"5.5.0":{"tag":"5.5.0","author":"mihdan","date":"2023-03-18 20:29:50"},"5.5.1":{"tag":"5.5.1","author":"mihdan","date":"2023-03-21 10:40:51"},"5.5.2":{"tag":"5.5.2","author":"mihdan","date":"2023-03-31 07:32:44"},"5.5.3":{"tag":"5.5.3","author":"mihdan","date":"2023-07-15 13:19:14"},"6.0.0":{"tag":"6.0.0","author":"mihdan","date":"2023-07-25 21:21:59"},"6.0.1":{"tag":"6.0.1","author":"mihdan","date":"2023-07-25 22:37:27"},"6.0.2":{"tag":"6.0.2","author":"mihdan","date":"2023-07-26 08:50:31"},"6.0.3":{"tag":"6.0.3","author":"mihdan","date":"2023-07-29 11:52:03"},"6.0.4":{"tag":"6.0.4","author":"mihdan","date":"2023-09-23 16:06:55"},"6.0.5":{"tag":"6.0.5","author":"mihdan","date":"2023-10-09 17:10:23"},"6.0.6":{"tag":"6.0.6","author":"mihdan","date":"2024-01-14 13:30:16"},"6.0.7":{"tag":"6.0.7","author":"mihdan","date":"2024-02-11 13:16:34"},"6.0.8":{"tag":"6.0.8","author":"mihdan","date":"2024-02-14 15:25:18"},"6.1.0":{"tag":"6.1.0","author":"mihdan","date":"2024-03-09 12:43:18"},"6.2.0":{"tag":"6.2.0","author":"mihdan","date":"2024-11-13 19:06:03"},"6.2.1":{"tag":"6.2.1","author":"mihdan","date":"2024-11-13 20:37:10"},"6.2.2":{"tag":"6.2.2","author":"mihdan","date":"2024-11-15 19:40:14"},"6.2.3":{"tag":"6.2.3","author":"mihdan","date":"2024-11-24 16:28:31"},"6.3.0":{"tag":"6.3.0","author":"mihdan","date":"2024-12-22 14:04:21"},"6.4.0":{"tag":"6.4.0","author":"mihdan","date":"2025-05-03 07:58:40"},"6.4.1":{"tag":"6.4.1","author":"mihdan","date":"2025-10-22 20:16:25"},"6.5.0":{"tag":"6.5.0","author":"mihdan","date":"2025-10-24 20:12:07"},"6.6.0":{"tag":"6.6.0","author":"mihdan","date":"2025-11-30 21:51:12"},"6.7.0":{"tag":"6.7.0","author":"mihdan","date":"2026-04-01 21:06:17"},"6.8.0":{"tag":"6.8.0","author":"mihdan","date":"2026-05-10 10:25:15"},"7.0.0":{"tag":"7.0.0","author":"mihdan","date":"2026-05-18 16:37:20"},"7.0.1":{"tag":"7.0.1","author":"mihdan","date":"2026-05-20 16:55:17"},"trunk":{"tag":"trunk","author":"mihdan","date":"2021-07-29 10:52:11"}},"upgrade_notice":[],"ratings":{"1":5,"2":1,"3":3,"4":4,"5":85},"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":2434252,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":2434252,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":2834364,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":2434252,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":2434252,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3539734,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/options-general.php?page=cyr-to-lat\",\"plugins\":[\"cyr2lat\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"cyr2lat\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["1.0","1.0.1","2.0","2.1","3.0","3.1","3.2","3.3","3.4","3.6.1","3.6.2","3.6.3","3.6.4","3.6.5","3.7","4.0","4.1","4.1.1","4.1.2","4.2","4.2.1","4.2.2","4.2.3","4.3","4.3.1","4.3.2","4.3.3","4.3.4","4.3.5","4.4.0","4.5.0","4.5.1","4.5.2","4.6.0","4.6.1","4.6.2","4.6.3","4.6.4","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.1.0","5.2.0","5.2.2","5.2.3","5.2.4","5.2.5","5.2.6","5.2.7","5.3.0","5.4.0","5.5.0","5.5.1","5.5.2","5.5.3","6.0.0","6.0.1","6.0.2","6.0.3","6.0.4","6.0.5","6.0.6","6.0.7","6.0.8","6.1.0","6.2.0","6.2.1","6.2.2","6.2.3","6.3.0","6.4.0","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0.0","7.0.1","trunk"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":2498806,"resolution":"1","location":"assets","locale":"","width":1758,"height":925},"screenshot-2.png":{"filename":"screenshot-2.png","revision":2498806,"resolution":"2","location":"assets","locale":"","width":1758,"height":925},"screenshot-3.png":{"filename":"screenshot-3.png","revision":2498806,"resolution":"3","location":"assets","locale":"","width":1919,"height":1006},"screenshot-4.png":{"filename":"screenshot-4.png","revision":2508343,"resolution":"4","location":"assets","locale":"","width":431,"height":449}},"screenshots":{"1":"Tables settings page","2":"Converter settings page","3":"Block editor with transliterated slug","4":"WPML Certificate"}},"plugin_section":[],"plugin_tags":[6562,99,562,2333,8312],"plugin_category":[48],"plugin_contributors":[145445,78005,80653,77853,77906],"plugin_business_model":[],"class_list":["post-449","plugin","type-plugin","status-publish","hentry","plugin_tags-cyrillic","plugin_tags-multilingual","plugin_tags-slugs","plugin_tags-translation","plugin_tags-transliteration","plugin_category-language-tools","plugin_contributors-kaggdesign","plugin_contributors-karevn","plugin_contributors-mihdan","plugin_contributors-sergeybiryukov","plugin_contributors-webvitaly","plugin_committers-kaggdesign","plugin_committers-mihdan","plugin_committers-sergeybiryukov"],"banners":{"banner":"https:\/\/ps.w.org\/cyr2lat\/assets\/banner-772x250.png?rev=2434252","banner_2x":"https:\/\/ps.w.org\/cyr2lat\/assets\/banner-1544x500.png?rev=2434252","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/cyr2lat\/assets\/icon.svg?rev=2834364","icon":"https:\/\/ps.w.org\/cyr2lat\/assets\/icon.svg?rev=2834364","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cyr2lat\/assets\/screenshot-1.png?rev=2498806","caption":"Tables settings page"},{"src":"https:\/\/ps.w.org\/cyr2lat\/assets\/screenshot-2.png?rev=2498806","caption":"Converter settings page"},{"src":"https:\/\/ps.w.org\/cyr2lat\/assets\/screenshot-3.png?rev=2498806","caption":"Block editor with transliterated slug"},{"src":"https:\/\/ps.w.org\/cyr2lat\/assets\/screenshot-4.png?rev=2508343","caption":"WPML Certificate"}],"raw_content":"<!--section=description-->\n<p>Converts Cyrillic characters in post, page, and term slugs to Latin characters. Useful for creating human-readable URLs.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>The only plugin with a fully editable transliteration table. Allows adding\/removing and editing pairs like '\u042f' =&gt; 'Ya', or even '\u041f\u0438\u0432\u043e' =&gt; 'Beer'<\/li>\n<li>Converts post, page, custom post type, and term slugs through explicit WordPress save and REST\/Gutenberg paths<\/li>\n<li>Converts any number of existing post, page, and term slugs in background processes or with WP-CLI<\/li>\n<li>Saves existing post and page permalinks integrity<\/li>\n<li>Performs transliteration of attachment file names<\/li>\n<li>Supports WooCommerce product, product taxonomy, global attribute, local attribute, variation, and frontend cart slug flows without automatic migration of existing attributes<\/li>\n<li>The plugin supports Russian, Belorussian, Ukrainian, Bulgarian, Macedonian, Serbian, Greek, Armenian, Georgian, Kazakh, Hebrew, and Chinese characters<\/li>\n<li><a href=\"https:\/\/kagg.eu\/en\/the-benefits-of-cyr-to-lat\/\">Has many advantages over similar plugins<\/a><\/li>\n<li><a href=\"https:\/\/wpml.org\/plugin\/cyr-to-lat\/\">Officially compatible with WPML<\/a><\/li>\n<\/ul>\n\n<p><\/p>\n\n<p>Based on the original Rus-To-Lat plugin by Anton Skorobogatov.<\/p>\n\n<p>Sponsored by <a href=\"https:\/\/www.blackfire.io\/\">Blackfire<\/a>.<\/p>\n\n<p><\/p>\n\n<h3>Plugin Support<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/support\/plugin\/cyr2lat\/\">Support Forum<\/a><\/li>\n<li><a href=\"https:\/\/t.me\/cyr2lat\">Telegram Group<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>cyr2lat<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<\/ol>\n\n<h4>Upgrade notes for 7.0<\/h4>\n\n<p>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.<\/p>\n\n<p>Existing posts, pages, terms, filenames, and WooCommerce product data are not destructively rewritten during the plugin upgrade. Use the Converter page or <code>wp cyr2lat regenerate<\/code> when you intentionally want to regenerate existing post and term slugs.<\/p>\n\n<p>WooCommerce attributes created before 7.0 are not automatically migrated. Existing global <code>pa_*<\/code> taxonomies and existing local or variation attribute keys should be reviewed separately; any future migration must use a dedicated dry-run-first workflow.<\/p>\n\n<p>Cyr-To-Lat 7.0.1 keeps legacy WooCommerce local variation attributes, including <code>Any<\/code> variations, aligned between the product form, add-to-cart request, and cart session.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20can%20i%20define%20my%20own%20substitutions%3F\"><h3>How can I define my own substitutions?<\/h3><\/dt>\n<dd><p>Add this code to your theme's <code>functions.php<\/code> file:<\/p>\n\n<pre><code>\/**\n * Modify conversion table.\n *\n * @param array $table Conversion table.\n *\n * @return array\n *\/\nfunction my_ctl_table( $table ) {\n   $table['\u042a'] = 'U';\n   $table['\u044a'] = 'u';\n\n   return $table;\n}\nadd_filter( 'ctl_table', 'my_ctl_table' );\n<\/code><\/pre><\/dd>\n<dt id=\"how%20can%20i%20redefine%20non-standard%20locale%3F\"><h3>How can I redefine non-standard locale?<\/h3><\/dt>\n<dd><p>For instance, if your non-standard locale is uk_UA, you can redefine it to <code>uk<\/code> by adding the following code to your theme's <code>function.php<\/code> file:<\/p>\n\n<pre><code>\/**\n * Use non-standard locale.\n *\n * @param string $locale Current locale.\n *\n * @return string\n *\/\nfunction my_ctl_locale( $locale ) {\n    if ( 'uk_UA' === $locale ) {\n        return 'uk';\n    }\n\n    return $locale;\n}\nadd_filter( 'ctl_locale', 'my_ctl_locale' );\n<\/code><\/pre><\/dd>\n<dt id=\"how%20can%20i%20define%20my%20own%20transliteration%20of%20titles%3F\"><h3>How can I define my own transliteration of titles?<\/h3><\/dt>\n<dd><p>Add similar code to your theme's <code>functions.php<\/code> file:<\/p>\n\n<pre><code>\/**\n * Filter title before sanitizing.\n *\n * @param string|false $result Sanitized title.\n * @param string       $title  Title.\n *\n * @return string|false\n *\/\nfunction my_ctl_pre_sanitize_title( $result, $title ) {\n    if ( '\u043f\u0438\u0432\u043e' === $title ) {\n        return 'beer';\n    }\n\n    return $result;\n}\nadd_filter( 'ctl_pre_sanitize_title', 10, 2 );\n<\/code><\/pre><\/dd>\n<dt id=\"how%20can%20i%20control%20the%20legacy%20sanitize_title%20bridge%3F\"><h3>How can I control the legacy sanitize_title bridge?<\/h3><\/dt>\n<dd><p>Version 7.0 uses explicit slug handlers for posts, terms, WooCommerce attributes, and other known save paths. A legacy <code>sanitize_title<\/code> bridge remains as a compatibility fallback for broad calls that older integrations may still rely on.<\/p>\n\n<p>You can disable the broad fallback with this code:<\/p>\n\n<pre><code>add_filter( 'ctl_enable_legacy_sanitize_title_bridge', '__return_false' );\n<\/code><\/pre>\n\n<p>The filter receives the current default value, <code>$title<\/code>, <code>$raw_title<\/code>, and <code>$context<\/code>. Explicit known contexts, such as WordPress save handling, continue to use the dedicated 7.0 slug paths.<\/p>\n\n<p>For debugging unknown bridge calls, define <code>CYR_TO_LAT_DEBUG_LEGACY_SANITIZE_TITLE_BRIDGE<\/code> as <code>true<\/code>. This diagnostic log is disabled by default and is not enabled by <code>WP_DEBUG<\/code>.<\/p><\/dd>\n<dt id=\"how%20can%20i%20define%20my%20own%20transliteration%20of%20filenames%3F\"><h3>How can I define my own transliteration of filenames?<\/h3><\/dt>\n<dd><p>Add similar code to your theme's <code>functions.php<\/code> file:<\/p>\n\n<pre><code>\/**\n * Filter filename before sanitizing.\n *\n * @param string|false $result   Sanitized filename.\n * @param string       $filename Title.\n *\n * @return string|false\n *\/\nfunction my_ctl_pre_sanitize_filename( $result, $filename ) {\n    if ( '\u043f\u0438\u0432\u043e' === $filename ) {\n        return 'beer';\n    }\n\n    return $result;\n}\nadd_filter( 'ctl_pre_sanitize_filename', 10, 2 );\n<\/code><\/pre><\/dd>\n<dt id=\"how%20can%20i%20allow%20the%20plugin%20to%20work%20on%20the%20frontend%3F\"><h3>How can I allow the plugin to work on the frontend?<\/h3><\/dt>\n<dd><p>Add the following code to your plugin's (or mu-plugin's) main file. This code won't work being added to a theme's functions.php file.<\/p>\n\n<pre><code>\/**\n * Filter status allowed Cyr To Lat plugin to work.\n *\n * @param bool $allowed\n *\n * @return bool\n *\/\nfunction my_ctl_allow( bool $allowed ): bool {\n    $uri = isset( $_SERVER['REQUEST_URI'] ) ?\n        sanitize_url( wp_unslash( $_SERVER['REQUEST_URI'] ) ) :\n        '';\n\n    if ( 0 === strpos( $uri, '\/divi-comments' ) ) {\n        return true;\n    }\n\n    return $allowed;\n}\n\nadd_filter( 'ctl_allow', 'my_ctl_allow' );\n<\/code><\/pre><\/dd>\n<dt id=\"how%20can%20i%20limit%20post%20types%20for%20background%20conversion%3F\"><h3>How can I limit post types for background conversion?<\/h3><\/dt>\n<dd><p>Add similar code to your theme's <code>functions.php<\/code> file:<\/p>\n\n<pre><code>\/**\n * Filter post types allowed for background conversion.\n *\n * @param array $post_types Allowed post types.\n *\n * @return array\n *\/\nfunction my_ctl_post_types( $post_types ) {\n    return [\n        'post'          =&gt; 'post',\n        'page'          =&gt; 'page',\n        'attachment'    =&gt; 'attachment',\n        'product'       =&gt; 'product',\n        'nav_menu_item' =&gt; 'nav_menu_item',\n    ];\n}\nadd_filter( 'ctl_post_types', 'my_ctl_post_types' );\n<\/code><\/pre><\/dd>\n<dt id=\"how%20can%20i%20convert%20many%20posts%2Fterms%20using%20wp-cli%3F\"><h3>How can I convert many posts\/terms using wp-cli?<\/h3><\/dt>\n<dd><p>Use the following command in the console:<\/p>\n\n<pre><code>wp cyr2lat regenerate [--post_type=&lt;post_type&gt;] [--post_status=&lt;post_status&gt;]\n<\/code><\/pre>\n\n<p>Where\n      -post_type is a list of post types,\n      -post_status is a list of post statuses.<\/p><\/dd>\n<dt id=\"what%20woocommerce%20attribute%20behavior%20is%20supported%20in%207.0%3F\"><h3>What WooCommerce attribute behavior is supported in 7.0?<\/h3><\/dt>\n<dd><p>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.<\/p>\n\n<p>Existing WooCommerce attributes are not automatically migrated during plugin upgrade. This means existing global <code>pa_*<\/code> 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.<\/p><\/dd>\n<dt id=\"how%20can%20i%20regenerate%20thumbnails%20safely%3F\"><h3>How can I regenerate thumbnails safely?<\/h3><\/dt>\n<dd><p>Regeneration of thumbnails with the command <code>wp media regenerate<\/code> can break links in old posts as file names become transliterated.<\/p>\n\n<p>To avoid it, deactivate the cyr2lat plugin during regeneration:<\/p>\n\n<pre><code>wp media regenerate --skip-plugins=cyr2lat\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20contribute%3F\"><h3>Can I contribute?<\/h3><\/dt>\n<dd><p>Yes, you can!<\/p>\n\n<ul>\n<li>Join in on our <a href=\"https:\/\/github.com\/mihdan\/cyr2lat\">GitHub repository<\/a><\/li>\n<li>Join in on our <a href=\"https:\/\/t.me\/cyr2lat\">Telegram Group<\/a><\/li>\n<\/ul><\/dd>\n<dt id=\"where%20do%20i%20report%20security%20bugs%20found%20in%20this%20plugin%3F\"><h3>Where do I report security bugs found in this plugin?<\/h3><\/dt>\n<dd><p>Please report security vulnerabilities by email to:<\/p>\n\n<p><strong>security@kagg.eu<\/strong><\/p>\n\n<p>When reporting a vulnerability, please include as much information as possible to help us reproduce and investigate the issue, such as:<\/p>\n\n<ul>\n<li>A clear description of the vulnerability<\/li>\n<li>Steps to reproduce<\/li>\n<li>Proof-of-concept or exploit code (if available)<\/li>\n<li>Affected versions<\/li>\n<\/ul>\n\n<p>We will review your report and respond as quickly as possible.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>7.0.1 (20.05.2026)<\/h4>\n\n<ul>\n<li>Changed legacy sanitize_title bridge diagnostics to use the dedicated CYR_TO_LAT_DEBUG_LEGACY_SANITIZE_TITLE_BRIDGE constant instead of WP_DEBUG.<\/li>\n<li>Fixed legacy WooCommerce local variation attributes, including <code>Any<\/code> variations, after upgrading from versions before 7.0.<\/li>\n<li>Fixed duplicate WooCommerce product slugs when an existing product is updated with an empty slug.<\/li>\n<\/ul>\n\n<h4>7.0.0 (18.05.2026)<\/h4>\n\n<ul>\n<li>Refactored slug handling into explicit services for posts, terms, filenames, WooCommerce attributes, variation attributes, background conversion, and WP-CLI paths.<\/li>\n<li>Improved Gutenberg coverage through REST\/backend slug handling.<\/li>\n<li>Improved WooCommerce support for product, taxonomy, global attribute, local attribute, variation, frontend cart, REST\/API, and admin save flows.<\/li>\n<li>Added the <code>ctl_enable_legacy_sanitize_title_bridge<\/code> compatibility filter for broad legacy <code>sanitize_title<\/code> behavior.<\/li>\n<li>Documented that existing WooCommerce attributes are not automatically migrated in 7.0; future migration work must be a separate dry-run-first workflow.<\/li>\n<li>Documented the backend-first testing strategy without required Codeception or Playwright release dependencies.<\/li>\n<\/ul>\n\n<h4>6.8.0 (10.05.2026)<\/h4>\n\n<ul>\n<li>Fixed returning unexpected results by REST API in some cases.<\/li>\n<li>Fixed import of WooCommerce products.<\/li>\n<li>Fixed transliteration of product categories, brands, and tags.<\/li>\n<\/ul>\n\n<h4>6.7.0 (01.04.2026)<\/h4>\n\n<ul>\n<li>The minimum required PHP version is now 7.4.<\/li>\n<li>The minimum required WordPress version is now 6.0.<\/li>\n<li>Fixed a fatal error occurred with WP-CLI in a rare case.<\/li>\n<li>Fixed transliteration of WC local attributes.<\/li>\n<li>Tested with WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>6.6.0 (30.11.2025)<\/h4>\n\n<ul>\n<li>Fixed the deprecated function message in Main.php with WordPress 6.9.<\/li>\n<li>Tested with PHP 8.4.<\/li>\n<li>Tested with WordPress 6.9.<\/li>\n<li>Tested with WooCommerce 10.3.<\/li>\n<\/ul>\n\n<h4>6.5.0 (24.10.2025)<\/h4>\n\n<ul>\n<li>Fixed transliteration of tags during editing.<\/li>\n<\/ul>\n\n<h4>6.4.1 (03.05.2025)<\/h4>\n\n<ul>\n<li>Fixed the layout of messages on the Tables page.<\/li>\n<li>Tested with WordPress 6.8.<\/li>\n<li>Tested with WooCommerce 9.8.<\/li>\n<\/ul>\n\n<h4>6.3.0 (22.12.2024)<\/h4>\n\n<ul>\n<li>Added a warning message on the Tables page when the active table does not match the site locale.<\/li>\n<li>Removed fix for translation after WordPress 6.5+ due to performance issues.<\/li>\n<\/ul>\n\n<h4>6.2.3 (24.11.2024)<\/h4>\n\n<ul>\n<li>Fixed the deprecation error with PHP 8.4.<\/li>\n<li>Tested with PHP 8.4.<\/li>\n<\/ul>\n\n<h4>6.2.2 (15.11.2024)<\/h4>\n\n<ul>\n<li>Fixed _load_textdomain_just_in_time notice with WordPress 6.7.<\/li>\n<li>Some translations were empty with WordPress 6.5+.<\/li>\n<\/ul>\n\n<h4>6.2.1 (13.11.2024)<\/h4>\n\n<ul>\n<li>Fixed the layout of the Converter page.<\/li>\n<li>Fixed issues reported by Plugin Check Plugin.<\/li>\n<\/ul>\n\n<h4>6.2.0 (13.11.2024)<\/h4>\n\n<ul>\n<li>Dropped support for PHP 7.0 and 7.1. The minimum required PHP version is now 7.2.<\/li>\n<li>The minimum required WordPress version is now 5.3.<\/li>\n<li>Fixed the notice about the _load_textdomain_just_in_time function being called incorrectly.<\/li>\n<li>Tested with WordPress 6.7.<\/li>\n<li>Tested with WooCommerce 9.4.<\/li>\n<\/ul>\n\n<h4>6.1.0 (09.03.2024)<\/h4>\n\n<ul>\n<li>Tested with WordPress 6.5.<\/li>\n<li>Tested with WooCommerce 8.6.<\/li>\n<li>Fixed the error on the System Info tab when post types or post statuses are not set.<\/li>\n<\/ul>\n\n<h4>6.0.8 (14.02.2024)<\/h4>\n\n<ul>\n<li>Improved detection of the Gutenberg editor.<\/li>\n<li>Fixed processing of product attributes.<\/li>\n<\/ul>\n\n<h4>6.0.7 (11.02.2024)<\/h4>\n\n<ul>\n<li>Tested with WooCommerce 8.5.<\/li>\n<li>Added redirect from the cyrillic post title when creating a new post.<\/li>\n<li>Added description of post types and post statuses on the Converter page.<\/li>\n<li>Fixed displaying all file descriptions in the Theme Editor in the current locale.<\/li>\n<li>Fixed PHP warning in the SettingsBase.<\/li>\n<li>Fixed the output of variable product attributes.<\/li>\n<\/ul>\n\n<h4>6.0.6 (14.01.2024)<\/h4>\n\n<ul>\n<li>Tested with WordPress 6.4.<\/li>\n<li>Tested with WooCommerce 8.4.<\/li>\n<li>Tested with PHP 8.3.<\/li>\n<li>Fixed documentation on ctl_allow filter.<\/li>\n<li>Fixed the improper display of the \"rate plugin\" message on options.php.<\/li>\n<\/ul>\n\n<h4>6.0.5 (09.10.2023)<\/h4>\n\n<ul>\n<li>Fixed displaying file descriptions in the Theme Editor; now in the current locale.<\/li>\n<\/ul>\n\n<h4>6.0.4 (23.09.2023)<\/h4>\n\n<ul>\n<li>Fixed disappeared file descriptions on the Theme File Editor page.<\/li>\n<\/ul>\n\n<h4>6.0.3 (29.07.2023)<\/h4>\n\n<ul>\n<li>Fixed the fatal error with Jetpack sync.<\/li>\n<\/ul>\n\n<h4>6.0.2 (26.07.2023)<\/h4>\n\n<ul>\n<li>Fixed the fatal error in admin_footer_text().<\/li>\n<\/ul>\n\n<h4>6.0.1 (26.07.2023)<\/h4>\n\n<ul>\n<li>Fixed the fatal error on the System Info page with empty options.<\/li>\n<\/ul>\n\n<h4>6.0.0 (26.07.2023)<\/h4>\n\n<ul>\n<li>Dropped support of PHP 5.6. The Minimum required PHP version is 7.0 now.<\/li>\n<li>Tested with WordPress 6.3.<\/li>\n<li>Tested with WooCommerce 7.9.<\/li>\n<li>Added System Info tab.<\/li>\n<li>Added filter 'ctl_allow'<\/li>\n<li>Fixed the console error when saving table data.<\/li>\n<li>Fixed the current table setting on the Tables page with WPML.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/plugins.svn.wordpress.org\/cyr2lat\/trunk\/changelog.txt\">See changelog for all versions<\/a>.<\/p>","raw_excerpt":"Convert Non-Latin characters in post, page and term slugs to Latin characters.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/users\/297445"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=449"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=449"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=449"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=449"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=449"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=449"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}