В современных проектах на WordPress часто возникает задача автоматического перевода контента на несколько языков. Одним из эффективных решений является использование REST API, позволяющего программно получать и изменять записи, а также интегрировать внешние сервисы автоперевода. В этой статье мы подробно рассмотрим, как настроить и использовать REST API WordPress для автоматического перевода постов, страниц и произвольных типов записей.
Что такое REST API в WordPress и почему он полезен для автоперевода
REST API — это интерфейс взаимодействия с сайтом на WordPress через HTTP-запросы. Он позволяет получать, создавать, изменять и удалять данные сайта программно. Это особенно удобно для интеграции с внешними сервисами перевода, такими как Google Translate API, DeepL, Microsoft Translator и другими.
С помощью REST API можно автоматически получать исходный текст контента, отправлять его на перевод и затем обновлять записи с переведённым содержимым. Такой подход упрощает процесс локализации и позволяет централизованно управлять переводами.
Помимо стандартных методов, REST API можно расширять и добавлять свои эндпоинты, что даст гибкость и контроль над процессом перевода.
Настройка REST API для безопасного автоперевода
Прежде чем использовать REST API для автоперевода, необходимо обеспечить безопасность доступа к нему. Прямое открытие API без защиты может привести к несанкционированным изменениям.
Самый простой способ — использовать аутентификацию на основе Application Passwords (Пароли приложения), которая встроена в WordPress с версии 5.6. Для этого:
- Перейдите в профиль пользователя, под которым будет работать автопереводчик.
- Создайте новый пароль приложения, например,
wptranslate-auto-translate. - Используйте этот пароль и имя пользователя для базовой HTTP-аутентификации в запросах к REST API.
Альтернативный и более гибкий способ — использовать JWT (JSON Web Token) или OAuth, но они требуют дополнительной настройки и плагинов.
Пример кода: Автоматический перевод постов с помощью REST API и Google Translate
Рассмотрим пример, где мы получаем посты через REST API, переводим их содержимое через Google Translate API и обновляем записи с переведённым текстом. Для упрощения возьмём перевод с русского на английский.
Для работы потребуется ключ Google Cloud Translation API. Подробнее о его получении — на официальном сайте Google.
1. Запрос постов через REST API
function wptranslate_get_posts($per_page = 5) {
$response = wp_remote_get('https://example.com/wp-json/wp/v2/posts?per_page=' . $per_page);
if (is_wp_error($response)) {
return [];
}
$body = wp_remote_retrieve_body($response);
return json_decode($body, true);
}Эта функция получает последние 5 постов с сайта.
2. Функция перевода через Google Translate API
function wptranslate_google_translate($text, $target = 'en') {
$apiKey = 'ВАШ_GOOGLE_API_КЛЮЧ';
$url = 'https://translation.googleapis.com/language/translate/v2';
$response = wp_remote_post($url, [
'body' => json_encode([
'q' => $text,
'target' => $target,
'format' => 'text'
]),
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $apiKey
]
]);
if (is_wp_error($response)) {
return false;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
return $body['data']['translations'][0]['translatedText'] ?? false;
}Обратите внимание: для Google Translate API авторизация обычно делается через ключ в URL, но для безопасности рекомендуется использовать серверный прокси или специальные SDK.
3. Обновление поста с переведённым содержимым
function wptranslate_update_post_translation($post_id, $translated_title, $translated_content) {
$url = 'https://example.com/wp-json/wp/v2/posts/' . $post_id;
$username = 'ваш_логин';
$password = 'пароль_приложения';
$auth = base64_encode($username . ':' . $password);
$response = wp_remote_request($url, [
'method' => 'POST',
'headers' => [
'Authorization' => 'Basic ' . $auth,
'Content-Type' => 'application/json'
],
'body' => json_encode([
'title' => $translated_title,
'content' => $translated_content
])
]);
return !is_wp_error($response);
}4. Скрипт объединения всего процесса
$posts = wptranslate_get_posts(3);
foreach ($posts as $post) {
$translated_title = wptranslate_google_translate($post['title']['rendered'], 'en');
$translated_content = wptranslate_google_translate(wp_strip_all_tags($post['content']['rendered']), 'en');
if ($translated_title && $translated_content) {
$result = wptranslate_update_post_translation($post['id'], $translated_title, $translated_content);
if ($result) {
echo 'Пост ID ' . $post['id'] . ' успешно переведён и обновлён.<br>';
} else {
echo 'Ошибка обновления поста ID ' . $post['id'] . '.<br>';
}
} else {
echo 'Ошибка перевода поста ID ' . $post['id'] . '.<br>';
}
}Расширение функционала: Добавление собственного эндпоинта REST API для перевода
Для удобства и безопасности можно создать собственный REST API эндпоинт, который будет принимать ID поста и язык перевода, а затем обрабатывать запрос и возвращать результат.
Пример регистрации эндпоинта в functions.php темы или плагине:
add_action('rest_api_init', function() {
register_rest_route('wptranslate/v1', '/translate-post/(?P<id>\d+)/(?P<lang>[a-z]{2})', [
'methods' => 'POST',
'callback' => 'wptranslate_rest_translate_post',
'permission_callback' => function () {
return current_user_can('edit_posts');
}
]);
});
function wptranslate_rest_translate_post($request) {
$post_id = $request['id'];
$lang = $request['lang'];
$post = get_post($post_id);
if (!$post) {
return new WP_Error('no_post', 'Пост не найден', ['status' => 404]);
}
$translated_title = wptranslate_google_translate($post->post_title, $lang);
$translated_content = wptranslate_google_translate($post->post_content, $lang);
if (!$translated_title || !$translated_content) {
return new WP_Error('translate_error', 'Ошибка перевода', ['status' => 500]);
}
wp_update_post([
'ID' => $post_id,
'post_title' => $translated_title,
'post_content' => $translated_content
]);
return [
'message' => 'Пост успешно переведён',
'post_id' => $post_id
];
}Такой эндпоинт удобно вызывать из внешних сервисов или административных скриптов.
Плагины для автоперевода, которые можно использовать вместе с REST API
Для упрощения задач автоперевода можно использовать готовые плагины, которые поддерживают интеграцию с REST API:
- WP Translate — плагин для профессионального автоперевода, поддерживает API Google, DeepL и другие.
- Clearfy Pro — оптимизирует работу сайта и API, помогает ускорять ответы REST API при переводах.
- WP Remark — плагин для автоперевода комментариев и пользовательских сообщений.
Использование REST API вместе с этими решениями позволяет создавать гибкие и мощные системы перевода с минимальным ручным вмешательством.
Заключение: Практические советы и рекомендации
Для успешного автоперевода через REST API советуем придерживаться следующих рекомендаций:
- Используйте безопасную аутентификацию (пароли приложений, JWT).
- Обрабатывайте ошибки API и сетевые сбои, чтобы избежать потери данных.
- Кешируйте переводы, чтобы не перегружать сервисы и ускорять работу.
- Обратите внимание на форматирование HTML в контенте — некоторые переводчики плохо работают с тегами, лучше передавать чистый текст.
- Тестируйте на небольших объемах перед массовым запуском.
Данный подход позволит автоматизировать перевод контента на WordPress, повысить удобство поддержки мультиязычности и сэкономить время на локализацию сайта.