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

В современных проектах на 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, повысить удобство поддержки мультиязычности и сэкономить время на локализацию сайта.

Как добавить автоперевод сообщений об ошибках в WordPress
19.01.2026
Как добавить поддержку мультиязычности в собственном плагине WordPress
23.12.2025
Как создать автоперевод шорткодов в WordPress
07.04.2026
Как добавить собственные скачиваемые переводы в WordPress
23.11.2025
Как автоматизировать перевод сообщений WordPress: плагины и кодовые решения
17.11.2025