by Sergey Biryukov
4.7 (97 reviews)
Cyr-To-Lat
Convert Non-Latin characters in post, page and term slugs to Latin characters.
Compatible with WP 6.9
v6.6.0
Current Version v6.6.0
Updated 1 month ago
Last Update on 01 Dec, 2025
Synced 17 hours ago
Last Synced on
Rank
#204
—
No change
Active Installs
300K+
-2%
KW Avg Position
40
—
No change
Downloads
3M
+618 today
Support Resolved
100%
—
No change
Rating
94%
Review 4.7 out of 5
4.7
(97 reviews)
Next Milestone 400K
300K+
400K+
45
Ranks to Climb
-
Growth Needed
8,000,000
Active Installs
Pro
Unlock Exact Install Count
See the precise estimated active installs for this plugin, calculated from real-time ranking data.
- Exact install estimates within tiers
- Track install growth over time
- Milestone progress predictions
Need 4,500,000 more installs to reach 400K+
Rank Changes
Current
#204
Change
Best
#
Downloads Growth
Downloads
Growth
Peak
Upgrade to Pro
Unlock 30-day, 90-day, and yearly download history charts with a Pro subscription.
Upgrade NowReviews & Ratings
4.7
97 reviews
Overall
94%
5
84
(87%)
4
4
(4%)
3
3
(3%)
2
1
(1%)
1
5
(5%)
Tracked Keywords
Showing 2 of 2| Keyword | Position | Change | Type | Updated |
|---|---|---|---|---|
| transliteration | 26 | — | Tag | 1 month ago |
| cyrillic | 54 | — | Tag | 1 month ago |
Unlock Keyword Analytics
Track keyword rankings, search positions, and discover new ranking opportunities with a Pro subscription.
- Full keyword position tracking
- Historical ranking data
- Competitor keyword analysis
Support Threads Overview
Resolved
Unresolved
2
Total Threads
2
Resolved
0
Unresolved
100%
Resolution Rate
Track This Plugin
Get detailed analytics, keyword tracking, and position alerts delivered to your inbox.
Start Tracking FreePlugin Details
- Version
- 6.6.0
- Last Updated
- Dec 01, 2025
- Requires WP
- 5.3+
- Tested Up To
- 6.9
- PHP Version
- 7.2 or higher
- Author
- Sergey Biryukov
Support & Rating
- Rating
- ★ ★ ★ ★ ★ 4.7
- Reviews
- 97
- Support Threads
- 2
- Resolved
- 100%
Keywords
Upgrade to Pro
Unlock keyword rankings, search positions, and detailed analytics with a Pro subscription.
Upgrade NowSimilar Plugins
WP Adminify – White Label WordPress, Admin Menu Editor, Login Customizer
7K+ installs
#2,736
Master Addons For Elementor - White Label, Free Widgets, Hover Effects, Conditions, & Animations
40K+ installs
#929
Connect Polylang for Elementor
100K+ installs
#299
WPML Multilingual & Multicurrency for WooCommerce
100K+ installs
#317
No Category Base (WPML)
100K+ installs
#342
Frequently Asked Questions
Common questions about Cyr-To-Lat
/**
* 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' );
How can I redefine non-standard locale?
For instance, if your non-standard locale is uk_UA, you can redefine it to uk by adding the following code to your theme's function.php file:
/**
* 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' );
* 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' );
How can I redefine non-standard locale?
For instance, if your non-standard locale is uk_UA, you can redefine it to uk by adding the following code to your theme's function.php file:
/**
* 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' );
/**
* 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 );
* 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 );
/**
* 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 );
How can I allow the plugin to work on the frontend?
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.
/**
* 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' );
* 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 );
How can I allow the plugin to work on the frontend?
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.
/**
* 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' );
/**
* 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' );
* 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 cyr2lat regenerate [--post_type=<post_type>] [--post_status=<post_status>]
Where
-post_type is a list of post types,
-post_status is a list of post statuses.
How can I regenerate thumbnails safely?
Regeneration of thumbnails with the command wp media regenerate can break links in old posts as file names become transliterated.
To avoid it, deactivate the cyr2lat plugin during regeneration:
wp media regenerate --skip-plugins=cyr2lat
Where
-post_type is a list of post types,
-post_status is a list of post statuses.
How can I regenerate thumbnails safely?
Regeneration of thumbnails with the command wp media regenerate can break links in old posts as file names become transliterated.
To avoid it, deactivate the cyr2lat plugin during regeneration:
wp media regenerate --skip-plugins=cyr2lat
Join in on our GitHub repository
Join in on our Telegram Group
Where do I report security bugs found in this plugin?
Please report security bugs found in the source code of the undefined plugin through the Patchstack Vulnerability Disclosure Program. The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.
Join in on our Telegram Group
Where do I report security bugs found in this plugin?
Please report security bugs found in the source code of the undefined plugin through the Patchstack Vulnerability Disclosure Program. The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.