В WordPress часто возникает задача автоматической транслитерации заголовков постов и страниц для формирования SEO-дружественных URL (человекопонятных пермалинков). Это особенно полезно, если ваш контент на кириллице, а URL нужно сделать латиницей, чтобы избежать проблем с кодировкой и улучшить индексирование сайта поисковиками.
Зачем нужна автоматическая транслитерация заголовков
По умолчанию WordPress пытается создать ярлык (slug) из заголовка поста при его создании. Однако, если заголовок содержит русские буквы, URL будет содержать кириллицу, что не всегда удобно и может вызывать проблемы с некоторыми браузерами, кэш-серверами и SEO.
Автоматическая транслитерация позволяет:
- Формировать читаемые URL латиницей;
- Избежать дублирования URL с кириллическими и латинскими символами;
- Упростить ручное редактирование ссылок;
- Повысить SEO-оптимизацию сайта.
Основные подходы к реализации транслитерации заголовков
Существует несколько способов реализовать автоматическую транслитерацию в WordPress:
- Использование готовых плагинов;
- Добавление пользовательского кода в functions.php темы или в собственный плагин;
- Комбинация плагинов и кастомных фильтров.
Рассмотрим практические примеры.
Использование плагина Clearfy Pro для транслитерации
Плагин Clearfy Pro предлагает удобные настройки для автоматической транслитерации URL и оптимизации сайта. В нем есть возможность настроить правила транслитерации, исключения и автоматическую замену символов.
Преимущества Clearfy Pro:
- Гибкая настройка транслитерации;
- Управление исключениями и символами;
- Автоматическая обработка новых записей и массовая обработка старых URL;
- Дополнительные SEO-настройки.
Реализация транслитерации с помощью собственного кода
Если вы предпочитаете не использовать готовые плагины, можно добавить следующий код в файл functions.php вашей темы или в отдельный плагин. Код автоматически транслитерирует заголовок поста при сохранении и устанавливает транслитерированный slug.
function cyrtolat_set_post_slug_translit($post_ID, $post, $update) {
if ($post->post_type != 'post' && $post->post_type != 'page') {
return;
}
if ($post->post_status != 'publish') {
return;
}
// Проверяем, если ярлык уже есть - не меняем
if (!empty($post->post_name)) {
return;
}
$translit = cyrtolat_transliterate($post->post_title);
// Обновляем запись с новым slug
wp_update_post(array(
'ID' => $post_ID,
'post_name' => $translit
));
}
add_action('wp_insert_post', 'cyrtolat_set_post_slug_translit', 10, 3);
function cyrtolat_transliterate($text) {
$converter = array(
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i',
'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',
'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch',
'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '',
'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',
'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I',
'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N',
'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch',
'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '',
'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
);
$text = strtr($text, $converter);
// Заменяем пробелы и прочие символы на дефисы
$text = preg_replace('/[^A-Za-z0-9-]+/', '-', $text);
$text = trim($text, '-');
$text = strtolower($text);
return $text;
}Данный код позволяет автоматически формировать slug из заголовка с транслитерацией русских символов и заменой пробелов и специальных символов на дефисы. При сохранении записи создается чистый латинский ярлык.
Преимущества собственного решения
Использование собственного кода дает следующие плюсы:
- Контроль над процессом транслитерации;
- Возможность расширять и кастомизировать функции под свои нужды;
- Отсутствие зависимости от сторонних плагинов;
- Оптимизация под конкретный проект.
Однако стоит учитывать, что в крупных проектах удобнее использовать готовые решения с расширенными функциями.
Дополнительные советы по работе с транслитерацией
Обработка дубликатов slug
Если в базе уже есть записи с одинаковым slug, WordPress автоматически добавит суффиксы (-2, -3 и т.п.). Чтобы предотвратить конфликты, можно добавить дополнительную логику проверки уникальности slug или использовать плагин Clearfy Pro, который умеет управлять этим автоматически.
Массовая транслитерация уже опубликованных записей
Если на сайте много старого контента с кириллическими URL, полезно сделать массовую транслитерацию. Для этого можно написать скрипт, который переберет все посты и обновит поле post_name с помощью функции транслитерации. Например:
function cyrtolat_mass_translit() {
$args = array(
'post_type' => array('post', 'page'),
'posts_per_page' => -1,
'post_status' => 'publish',
);
$posts = get_posts($args);
foreach ($posts as $post) {
$new_slug = cyrtolat_transliterate($post->post_title);
if ($post->post_name !== $new_slug) {
wp_update_post(array(
'ID' => $post->ID,
'post_name' => $new_slug
));
}
}
}Этот код можно запускать один раз в админке через подключенный файл, WP-CLI или временный хук.
Совместимость с другими плагинами
При использовании плагинов SEO, кэширования и безопасности важно протестировать работу транслитерации, чтобы избежать конфликтов. Например, Clearfy Pro хорошо интегрируется с популярными SEO-плагинами и минимизирует риски.