Как прописать автоперевод в WordPress через хуки и функции

Автоматический перевод контента в WordPress — задача, которая часто возникает при создании многоязычных сайтов. Хотя существуют готовые плагины, иногда требуется гибкое и тонко настроенное решение, интегрированное напрямую в шаблон или функционал сайта. В этой статье мы подробно разберём, как создать собственный автоперевод с помощью хуков и функций WordPress, используя сторонние API-переводчики, и обеспечим примеры кода для реальных случаев.

Почему стоит использовать хуки и функции для автоперевода?

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

  • Оптимизировать скорость работы сайта, вызывая перевод только там, где это действительно нужно.
  • Интегрировать любой сервис перевода, например, Google Translate API, DeepL API или свой собственный сервис.
  • Добавлять кэширование переведённых текстов для снижения числа запросов к API.
  • Автоматизировать перевод при сохранении постов, страниц, метаданных и пользовательского контента.

Рассмотрим на практике, как реализовать подобный автоперевод.

Подключение API переводчика — пример с DeepL

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

В файле functions.php вашей темы или в отдельном плагине добавьте функцию для вызова DeepL API:

function wptranslate_deepl_translate_text($text, $target_lang = 'EN') {
    $api_key = 'ВАШ_API_КЛЮЧ_DEEPL';
    $url = 'https://api-free.deepl.com/v2/translate';

    $args = [
        'body' => [
            'auth_key' => $api_key,
            'text' => $text,
            'target_lang' => strtoupper($target_lang),
        ],
    ];

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

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

    $data = json_decode(wp_remote_retrieve_body($response), true);
    if (!empty($data['translations'][0]['text'])) {
        return $data['translations'][0]['text'];
    }

    return $text;
}

Эта функция принимает исходный текст и язык перевода, возвращая переведённую строку.

Автоперевод содержимого при сохранении поста

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

function wptranslate_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) {
        return;
    }

    // Получаем оригинальный заголовок и контент
    $original_title = $post->post_title;
    $original_content = $post->post_content;

    // Переводим на английский (пример)
    $translated_title = wptranslate_deepl_translate_text($original_title, 'EN');
    $translated_content = wptranslate_deepl_translate_text(wp_strip_all_tags($original_content), 'EN');

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

Используя этот код, при каждом сохранении записи будет создаваться английский перевод и сохраняться в мета-полях _translated_title_en и _translated_content_en.

Вывод переведённого контента на сайте

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

function wptranslate_get_translated_post_content($post_id, $lang = 'EN') {
    $translated_title = get_post_meta($post_id, '_translated_title_' . strtolower($lang), true);
    $translated_content = get_post_meta($post_id, '_translated_content_' . strtolower($lang), true);

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

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

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

$translated = wptranslate_get_translated_post_content(get_the_ID(), 'EN');
echo '<h1>' . esc_html($translated['title']) . '</h1>';
echo wp_kses_post($translated['content']);

Кэширование переводов для оптимизации

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

Пример для кэширования произвольного текста:

function wptranslate_get_cached_translation($text, $target_lang) {
    $cache_key = 'wptranslate_' . md5($text . $target_lang);
    $cached = get_transient($cache_key);
    if ($cached) {
        return $cached;
    }

    $translated = wptranslate_deepl_translate_text($text, $target_lang);
    set_transient($cache_key, $translated, DAY_IN_SECONDS);

    return $translated;
}

Пример интеграции с плагином Clearfy Pro для оптимизации

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

Выводы и рекомендации

Использование хуков и функций для создания автоперевода в WordPress — гибкий и мощный способ подстроить перевод именно под ваши задачи. Вы можете расширять приведённые примеры, интегрировать разные сервисы, добавлять поддержку кастомных типов записей и таксономий.

Главное — не забывайте про кэширование и обработку ошибок, чтобы не перегружать API и не ухудшать UX.

Для более продвинутых задач стоит обратить внимание на возможности API OpenAI GPT-4, который позволяет делать более качественные и контекстные переводы с помощью WPGPT.

Как добавить поддержку языков в собственном виджете WordPress
26.01.2026
Автоматический перевод атрибутов и фильтров товаров WooCommerce в WordPress
17.05.2026
Как использовать хук doretranslate для дополнительного перевода в WordPress
12.02.2026
Автоматический перевод атрибутов товаров WooCommerce в WordPress
10.05.2026
Автоматический перевод сообщений об ошибках в WordPress
12.03.2026