Введение
В этой статье я расскажу, как создать простой WordPress плагин для автоматической транслитерации кириллических URL в латиницу. Это решает проблему нечитаемых ссылок вида %D0%BA%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C.
Проблема
По умолчанию WordPress создаёт URL из заголовка записи. Если заголовок на русском, URL будет содержать кириллицу, которая в браузере отображается как закодированные символы:
- Было:
/как-сделать-липкий-сайдбар/→/%D0%BA%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C/ - Стало:
/kak-sdelat-lipkiy-saydbar/
Решение — создаём плагин
Шаг 1: Создаём папку плагина
Создаём папку dekanpro-transliterate в директории /wp-content/plugins/
Шаг 2: Создаём главный файл плагина
Создаём файл dekanpro-transliterate.php в папке плагина:
<?php
/**
* Plugin Name: DekanPro Transliterate
* Description: Транслитерация кириллических URL в латиницу
* Version: 1.0.0
* Author: DekanPro
*/
if (!defined('ABSPATH')) {
exit;
}
class DekanPro_Transliterate {
// Таблица транслитерации
private static $table = array(
'а' => 'a', 'б' => 'b', 'в' => 'v',
'г' => 'g', 'д' => 'd', 'е' => 'e',
'ё' => 'yo', 'ж' => 'zh', 'з' => 'z',
'и' => 'i', 'й' => 'y', 'к' => 'k',
'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r',
'с' => 's', 'т' => 't', 'у' => 'u',
'ф' => 'f', 'х' => 'h', 'ц' => 'ts',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch',
'ъ' => '', 'ы' => 'y', 'ь' => '',
'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
);
public static function init() {
add_filter('sanitize_title', array(__CLASS__, 'transliterate'), 9);
add_filter('sanitize_file_name', array(__CLASS__, 'transliterate'), 9);
}
public static function transliterate($title) {
// Добавляем заглавные буквы
$table = self::$table;
foreach ($table as $cyr => $lat) {
$table[mb_strtoupper($cyr)] = ucfirst($lat);
}
// Транслитерация
$title = strtr($title, $table);
// Очистка
$title = preg_replace('/[^a-zA-Z0-9\-_.]/', '-', $title);
$title = preg_replace('/-+/', '-', $title);
$title = trim($title, '-');
$title = strtolower($title);
return $title;
}
}
DekanPro_Transliterate::init();
Шаг 3: Активируем плагин
Переходим в админку WordPress → Плагины → Находим «DekanPro Transliterate» → Нажимаем «Активировать»
Как это работает
sanitize_title">Фильтр sanitize_title
WordPress вызывает функцию sanitize_title() каждый раз, когда нужно создать slug из заголовка. Мы подключаемся к этому фильтру с приоритетом 9 (до стандартной обработки):
add_filter('sanitize_title', array(__CLASS__, 'transliterate'), 9);
strtr">Функция strtr()
PHP-функция strtr() заменяет символы по таблице соответствия. Это самый быстрый способ транслитерации:
$title = strtr($title, $table);
// "Привет" → "Privet"
Очистка строки
После транслитерации убираем все символы кроме букв, цифр и дефисов:
$title = preg_replace('/[^a-zA-Z0-9\-_.]/', '-', $title);
Структура файлов
wp-content/
└── plugins/
└── dekanpro-transliterate/
└── dekanpro-transliterate.php
Таблица транслитерации
Используется стандарт ГОСТ 7.79-2000:
| а→a | б→b | в→v | г→g | д→d |
| е→e | ё→yo | ж→zh | з→z | и→i |
| й→y | к→k | л→l | м→m | н→n |
| о→o | п→p | р→r | с→s | т→t |
| у→u | ф→f | х→h | ц→ts | ч→ch |
| ш→sh | щ→sch | ы→y | э→e | ю→yu |
| я→ya | ъ→ | ь→ |
Заключение
Теперь все новые записи будут автоматически получать читаемые латинские URL. Плагин также транслитерирует имена загружаемых файлов.

