Convert Non-Latin characters in post, page and term slugs to Latin characters.
Converts Cyrillic characters in post, page and term slugs to Latin characters. Useful for creating human-readable URLs.
Based on the original Rus-To-Lat plugin by Anton Skorobogatov.
Sponsored by Blackfire.
cyr2lat
folder to the /wp-content/plugins/
directory.Add this code to your theme’s functions.php
file:
/** * 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' );
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' );
Add similar code to your theme’s functions.php
file:
/** * 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 );
Add similar code to your theme’s functions.php
file:
/** * 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 );
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' );
Add similar code to your theme’s functions.php
file:
/** * 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' );
Use the following command in the console:
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.
Regeneration of thumbnails with the command wp media regenerate
can break links in old posts as file names become transliterated.
To avoid it, deactivate cyr2lat plugin during regeneration:
wp media regenerate --skip-plugins=cyr2lat
Yes, you can!