Как использовать REST API для автоперевода контента WordPress

Диагностика проблемы: почему нужен автоперевод через REST API

Многие сайты на WordPress сталкиваются с необходимостью переводить динамический контент, который часто обновляется. Традиционные плагины для мультиязычности заточены под статический перевод страниц и записей, но не всегда могут оперативно обрабатывать пользовательские запросы или автоматизировать перевод новых элементов. Использование REST API позволяет интегрировать автоперевод непосредственно в процесс создания и вывода контента, что упрощает рабочие процессы и снижает нагрузку на администраторов.

Как подготовить WordPress к использованию REST API для автоперевода

1. Проверка доступности REST API

По умолчанию REST API включен в WordPress. Чтобы проверить, работает ли он на вашем сайте, откройте в браузере URL https://ваш-сайт.ru/wp-json/. Вы должны увидеть JSON-ответ с информацией о доступных эндпоинтах.

2. Получение доступа к API стороннего сервиса автоперевода

Для автоперевода понадобится API ключ от сервиса, например Google Translate API или DeepL API. Зарегистрируйтесь в сервисе, получите ключ и ознакомьтесь с документацией по отправке запросов.

Пошаговое решение: интеграция автоперевода через REST API

1. Создание пользовательского эндпоинта в WordPress для автоперевода

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

add_action('rest_api_init', function () {
    register_rest_route('autotranslate/v1', '/translate', [
        'methods' => 'POST',
        'callback' => 'wp_autotranslate_callback',
        'permission_callback' => '__return_true',
    ]);
});

function wp_autotranslate_callback(WP_REST_Request $request) {
    $text = $request->get_param('text');
    $target_lang = $request->get_param('target_lang');

    if (empty($text) || empty($target_lang)) {
        return new WP_Error('missing_params', 'Параметры text и target_lang обязательны', ['status' => 400]);
    }

    // Здесь вызов API автоперевода
    $translated = wp_call_external_translate_api($text, $target_lang);
    if (!$translated) {
        return new WP_Error('translate_error', 'Ошибка при переводе', ['status' => 500]);
    }

    return [
        'original' => $text,
        'translated' => $translated,
        'target_lang' => $target_lang
    ];
}

function wp_call_external_translate_api($text, $lang) {
    $api_key = 'ВАШ_API_КЛЮЧ';
    $url = 'https://translation.googleapis.com/language/translate/v2';

    $response = wp_remote_post($url, [
        'body' => json_encode([
            'q' => $text,
            'target' => $lang,
            'format' => 'text'
        ]),
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer ' . $api_key
        ],
    ]);

    if (is_wp_error($response)) {
        return false;
    }

    $body = json_decode(wp_remote_retrieve_body($response), true);
    if (isset($body['data']['translations'][0]['translatedText'])) {
        return $body['data']['translations'][0]['translatedText'];
    }
    return false;
}

2. Вызов автоперевода из фронтенда через AJAX

Пример JavaScript кода, использующего REST API для перевода текста пользователя:

function translateText(text, targetLang) {
    return fetch('/wp-json/autotranslate/v1/translate', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            text: text,
            target_lang: targetLang
        })
    })
    .then(response => response.json())
    .then(data => {
        if (data.translated) {
            return data.translated;
        } else {
            throw new Error('Ошибка перевода');
        }
    });
}

// Использование
translateText('Привет, мир!', 'en').then(console.log).catch(console.error);

Проверка результата после внедрения

  • Отправьте POST-запрос на эндпоинт /wp-json/autotranslate/v1/translate с параметрами text и target_lang через curl или Postman.
  • Убедитесь, что в ответе приходит корректный переведённый текст.
  • В браузере проверьте, что вызов функции translateText корректно выводит перевод в консоль.

Частые ошибки и как их исправить

  • Ошибка 400: отсутствуют параметры — проверьте, что параметры text и target_lang передаются в теле запроса и не пустые.
  • Ошибка 500: проблема с API перевода — убедитесь, что API ключ верный и не истёк, а также что вы используете правильную авторизацию.
  • Неверный формат запроса — REST API ожидает JSON, убедитесь, что заголовок Content-Type установлен в application/json.
  • Проблемы с CORS — при вызове из браузера настройте заголовки сервера или используйте proxy.

Практические советы по безопасности и производительности

  • Ограничьте доступ к REST API эндпоинту, если перевод требуется только авторизованным пользователям. Например, замените permission_callback на проверку прав.
  • Кэшируйте результаты перевода в transient или отдельной кастомной таблице, чтобы не делать повторные запросы к внешнему API для одинаковых фраз.
  • Обрабатывайте ошибки API аккуратно и не отдавайте внутренние сообщения пользователям.
  • Для больших объёмов текста разбивайте запросы на части, чтобы не превысить лимиты API.

Сравнение подходов к автопереводу в WordPress

МетодПлюсыМинусыПример
Плагины (WPML, Polylang)Готовая интеграция, поддержка UIМогут быть тяжелыми, не всегда подходят для динамического контентаWPML, Polylang
REST API + кастомный кодГибкость, автоматизация, подходит для динамикиТребует программирования, настройка безопасностиКод из статьи
Встроенные API автоперевода плагиновПростота внедренияОграниченная функциональность, зависимость от плагинаPoliglot, WPRemark
Как настроить передачу языка в WordPress для автоперевода
31.03.2026
Как использовать хук wptranslate_autotranslate для автоперевода текстов в WordPress
28.03.2026
Как добавить автоперевод сообщений об ошибках в WordPress
19.01.2026
Автоматический перевод метаданных WooCommerce без потери качества
11.07.2026
Автоматический перевод атрибутов товаров WooCommerce в WordPress
10.05.2026