Как автоматически переводить контент WordPress с помощью API DeepL

Почему стоит использовать DeepL для автоперевода в WordPress

DeepL — один из самых качественных сервисов машинного перевода на рынке. Его API позволяет интегрировать автоперевод прямо в WordPress, что значительно упрощает работу с многоязычными сайтами. В отличие от Google Translate, DeepL часто дает более естественные и точные переводы, особенно для европейских языков.

Использование DeepL API позволяет автоматизировать перевод записей, страниц, пользовательских типов записей и даже метаданных. Это снижает ручную работу и ускоряет запуск многоязычного сайта.

Однако важно учитывать лимиты API, стоимость и необходимость правильной обработки ошибок при интеграции.

Настройка доступа к API DeepL

Для начала работы нужно зарегистрироваться на DeepL Developer и получить API ключ. Обычно это платная опция, но есть пробные тарифы с ограниченным количеством запросов.

После получения ключа нужно сохранить его в файле wp-config.php или в настройках плагина для безопасного доступа.

Пример сохранения ключа в wp-config.php:

define('WPTRANSLATE_DEEPL_API_KEY', 'ваш_ключ_здесь');

Создание функции автоперевода для WordPress с использованием API DeepL

Рассмотрим минимальный пример функции для отправки текста на перевод и получения результата.

function wptranslate_deepl_translate_text($text, $target_lang = 'EN') {
    $api_key = defined('WPTRANSLATE_DEEPL_API_KEY') ? WPTRANSLATE_DEEPL_API_KEY : '';
    if (empty($api_key) || empty($text)) {
        return $text;
    }

    $url = 'https://api-free.deepl.com/v2/translate';
    $args = [
        'body' => http_build_query([
            'auth_key' => $api_key,
            'text' => $text,
            'target_lang' => strtoupper($target_lang),
        ]),
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
        ],
        'timeout' => 15,
    ];

    $response = wp_remote_post($url, $args);

    if (is_wp_error($response)) {
        return $text; // возвращаем исходный текст при ошибке
    }

    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);

    if (isset($data['translations'][0]['text'])) {
        return $data['translations'][0]['text'];
    }

    return $text;
}

Эта функция принимает исходный текст и целевой язык (например, EN, DE, FR) и возвращает переведённый текст или исходный при ошибке.

Автоматический перевод записей WordPress при сохранении

Добавим хук, который будет при сохранении записи автоматически переводить заголовок и содержимое на заданный язык и сохранять их в произвольных полях.

function wptranslate_deepl_auto_translate_post($post_id) {
    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    // Проверяем права пользователя
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    $post = get_post($post_id);
    if (!$post || $post->post_type !== 'post') {
        return;
    }

    $target_lang = 'DE'; // Целевой язык перевода — немецкий

    $translated_title = wptranslate_deepl_translate_text($post->post_title, $target_lang);
    $translated_content = wptranslate_deepl_translate_text($post->post_content, $target_lang);

    // Сохраняем переводы в метаполях
    update_post_meta($post_id, '_wptranslate_deepl_title_de', $translated_title);
    update_post_meta($post_id, '_wptranslate_deepl_content_de', $translated_content);
}
add_action('save_post', 'wptranslate_deepl_auto_translate_post');

Такой подход позволяет хранить переводы вместе с оригиналом. Далее вы можете вывести их в шаблоне или использовать для создания многоязычного сайта.

Вывод переведенного контента в шаблонах

Чтобы показывать переведённый текст на сайте, можно создать функцию для вывода перевода, если он есть, или оригинала.

function wptranslate_deepl_get_translated_post_content($post_id, $lang = 'DE') {
    $title = get_post_meta($post_id, '_wptranslate_deepl_title_' . strtolower($lang), true);
    $content = get_post_meta($post_id, '_wptranslate_deepl_content_' . strtolower($lang), true);

    if ($title && $content) {
        return ['title' => $title, 'content' => $content];
    }

    // Если перевода нет, возвращаем оригинал
    $post = get_post($post_id);
    return ['title' => $post->post_title, 'content' => $post->post_content];
}

В шаблоне можно использовать так:

$translated = wptranslate_deepl_get_translated_post_content(get_the_ID(), 'DE');
echo '<h1>' . esc_html($translated['title']) . '</h1>';
echo apply_filters('the_content', $translated['content']);

Рекомендации и оптимизация использования DeepL API в WordPress

Для снижения количества запросов и экономии денег рекомендуется кешировать результаты перевода. В примере выше мы сохраняем переводы в метаполях, чтобы не делать повторных запросов к API.

Также полезно предусмотреть обработку ошибок, логирование и возможность ручного редактирования переведённого текста через админку.

Если у вас большой сайт, можно реализовать очередь переводов с wp_cron и обрабатывать посты партиями, чтобы не блокировать сохранение записи.

Альтернативные плагины для интеграции DeepL в WordPress

Если вы предпочитаете готовые решения, можно рассмотреть плагины, которые уже интегрируют DeepL, например:

  • WP Translate — удобный плагин с поддержкой DeepL и других сервисов.
  • Polylang Pro с аддоном для DeepL — позволяет настроить автоматический перевод контента.

Эти плагины имеют удобный интерфейс и дополнительные опции, но если нужна гибкая автоматизация, лучше реализовать собственные функции, как показано выше.

Как автоматически перевести метаданные в WordPress
02.03.2026
Как исправить проблему с переводом постоянных ссылок (Permalinks) в WordPress
09.12.2025
Как автоматизировать перевод динамического контента WordPress
14.04.2026
Как добавить автоперевод в WP Remark для WordPress
29.01.2026
Как автоматизировать перевод сообщений WordPress через хуки и плагины
13.12.2025