Автоматический перевод контента – востребованная функция для многих многоязычных сайтов на WordPress. Но что делать, если вы хотите избежать использования громоздких плагинов, которые могут замедлять сайт или содержать избыточный функционал? В этой статье мы рассмотрим, как интегрировать автоматический перевод с помощью API, используя минимальный собственный код. Это позволит вам гибко контролировать процесс перевода и точно настроить его под нужды сайта.
Почему стоит делать автоматический перевод без плагинов
Большинство популярных плагинов для перевода, например, WPML или Polylang, предоставляют массу возможностей, но они могут быть избыточны, если нужно просто быстро перевести часть контента.
Преимущества собственного решения:
- Минимальное влияние на производительность сайта.
- Гибкость в выборе провайдера перевода (Google, Yandex, DeepL и др.).
- Отсутствие зависимости от обновлений плагинов.
- Возможность кастомизации логики перевода под конкретные задачи.
Для примера возьмём API Яндекс.Переводчика – он прост и доступен.
Как получить доступ к API Яндекс.Переводчика
Для работы с API необходимо зарегистрироваться на Яндекс.Облако и создать сервисный аккаунт с правами на использование сервиса перевода.
После создания аккаунта получите OAuth-токен или ключ API, который потребуется для запросов.
Документация по API доступна на официальном сайте, там подробно описаны методы и параметры.
Пример функции автоматического перевода текста (wplangTranslateText)
Создадим простую функцию для отправки текста на перевод и получения результата.
function wplangTranslateText($text, $targetLang = 'en') {
$apiKey = 'ВАШ_API_КЛЮЧ_ЯНДЕКС';
$url = 'https://translate.api.cloud.yandex.net/translate/v2/translate';
$data = [
'targetLanguageCode' => $targetLang,
'texts' => [$text],
'folderId' => 'ВАШ_FOLDER_ID'
];
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response, true);
if (isset($json['translations'][0]['text'])) {
return $json['translations'][0]['text'];
}
return false;
}
Эта функция принимает исходный текст и целевой язык, отправляет запрос к API и возвращает переведённый текст. Замените ВАШ_API_КЛЮЧ_ЯНДЕКС и ВАШ_FOLDER_ID на ваши реальные данные.
Как интегрировать перевод в шаблоны WordPress
Чтобы динамически переводить текст в шаблонах, можно использовать фильтры или собственные функции вывода. Например, для перевода заголовка записи:
add_filter('the_title', 'wplangTranslateTitle', 10, 2);
function wplangTranslateTitle($title, $post_id) {
// Проверяем, что на фронтенде и не в админке
if (!is_admin()) {
$translated = wplangTranslateText($title, 'en');
if ($translated) {
return $translated;
}
}
return $title;
}
Так заголовок любой записи будет автоматически переводиться на английский язык при выводе.
Важно: чтобы не нагружать API при каждом запросе, рекомендуется кэшировать переводы. Это можно реализовать с помощью функций WordPress для кеширования, например, set_transient и get_transient.
Пример с кешированием перевода
function wplangTranslateTextCached($text, $targetLang = 'en') {
$cacheKey = 'wplang_translate_' . md5($text . $targetLang);
$cached = get_transient($cacheKey);
if ($cached !== false) {
return $cached;
}
$translated = wplangTranslateText($text, $targetLang);
if ($translated) {
set_transient($cacheKey, $translated, DAY_IN_SECONDS);
return $translated;
}
return false;
}
Теперь в фильтре используйте wplangTranslateTextCached вместо простой функции.
Как автоматизировать перевод контента при сохранении записи
Если нужно, чтобы перевод сохранялся в метаполе записи, а не генерировался на лету, можно добавить обработчик на сохранение записи.
add_action('save_post', 'wplangSaveTranslatedContent');
function wplangSaveTranslatedContent($post_id) {
if (wp_is_post_revision($post_id)) return;
$post = get_post($post_id);
if (!$post) return;
$translatedTitle = wplangTranslateTextCached($post->post_title, 'en');
$translatedContent = wplangTranslateTextCached($post->post_content, 'en');
if ($translatedTitle) {
update_post_meta($post_id, '_translated_title_en', $translatedTitle);
}
if ($translatedContent) {
update_post_meta($post_id, '_translated_content_en', $translatedContent);
}
}
Теперь при сохранении записи будет автоматически сохраняться перевод в метаполях _translated_title_en и _translated_content_en. Выводить их можно в шаблонах так:
$translated_title = get_post_meta(get_the_ID(), '_translated_title_en', true);
if ($translated_title) {
echo esc_html($translated_title);
} else {
the_title();
}
Полезные советы и практика
Выбор языка перевода
В функции wplangTranslateText и её вариациях вы можете динамически менять язык перевода в зависимости от выбранного пользователем языка сайта или настроек темы. Для этого используйте глобальные переменные или функции локализации.
Использование плагина Clearfy Pro для оптимизации
Если ваш сайт использует плагин Clearfy Pro от WPSHOP, он поможет отключить лишние скрипты и оптимизировать работу сайта, что особенно важно, если вы добавляете дополнительные запросы к внешним API.
Отладка и логирование запросов
Для отладки советуем вести логи запросов к API перевода, чтобы отслеживать возможные ошибки или ограничения по квотам. Можно использовать встроенные механизмы WordPress, например, функцию error_log для записи в лог сервера.
Выводы
Собственное решение для автоматического перевода на WordPress позволяет получить легковесный и гибкий инструмент, который не зависит от тяжелых плагинов. Использование API Яндекс.Переводчика или других сервисов вместе с кэшированием и интеграцией в шаблоны делает процесс масштабируемым и удобным для дальнейших доработок.