Как автоматизировать перевод динамического контента WordPress

Динамический контент в WordPress — это те данные, которые генерируются на лету в зависимости от действий пользователя, параметров запроса или других условий. Примеры включают заголовки записей, пользовательские мета-поля, вывод шорткодов, данные, получаемые через AJAX, и многое другое. Перевод такого контента часто вызывает сложности, так как стандартные методы локализации и переводов статического контента не работают «из коробки».

Проблемы перевода динамического контента WordPress

Основная сложность — динамический контент не всегда хранится в стандартных gettext-файлах (.po/.mo) и не может быть легко захвачен стандартными плагинами для мультиязычности, такими как WPML или Polylang. Часто перевод требуется на лету, особенно если данные подгружаются через AJAX или формируются в PHP в зависимости от условий.

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

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

Плагины для автоматизации перевода динамического контента

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

  • WPML String Translation — позволяет переводить строки, которые не связаны с записями, например, динамические заголовки, тексты виджетов, шорткодов. Имеет удобный интерфейс для поиска и добавления переводов.
  • TranslatePress — визуальный переводчик, который позволяет переводить любой контент на странице, включая динамический, даже подгруженный через AJAX.
  • WPGPT (с https://wpshop.ru/?utm_source=wptranslate.ru&utm_medium=article&utm_campaign=kak-avtomatizirovat-perevod-dinamicheskogo-kontenta-wordpress) — плагин для автоперевода, который может интегрироваться с динамическим контентом через хуки и фильтры.

Автоматический перевод динамического контента через хуки и фильтры

Для программного решения перевода динамического контента в WordPress можно использовать фильтры, которые обрабатывают выводимый текст. Ниже приведён пример функции, которая автоматически переводит строку с помощью API Google Translate (пример упрощён, для демонстрации концепции). Функция называется wptranslate_ru_translate_dynamic_text для уникальности.

function wptranslate_ru_translate_dynamic_text($text, $target_lang = 'ru') {
    // Проверяем, не пустой ли текст
    if (empty($text)) {
        return $text;
    }

    // Кэшируем переводы, чтобы не обращаться к API повторно
    static $cache = [];
    $cache_key = md5($text . $target_lang);
    if (isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }

    // Пример вызова API Google Translate (упрощённо)
    $api_key = 'ВАШ_GOOGLE_API_KEY';
    $url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;
    $data = [
        'q' => $text,
        'target' => $target_lang,
        'format' => 'text'
    ];

    $response = wp_remote_post($url, [
        'body' => json_encode($data),
        'headers' => [
            'Content-Type' => 'application/json'
        ]
    ]);

    if (is_wp_error($response)) {
        return $text; // Возвращаем оригинал при ошибке
    }

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

    return $text;
}

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

add_shortcode('wptranslate_ru_dynamic_title', function($atts) {
    $post_id = $atts['id'] ?? get_the_ID();
    $title = get_the_title($post_id);
    $lang = isset($_GET['lang']) ? sanitize_text_field($_GET['lang']) : 'ru';
    return wptranslate_ru_translate_dynamic_text($title, $lang);
});

Перевод данных, подгружаемых через AJAX

Если контент загружается через AJAX, нужно обеспечить передачу языка и динамический перевод на сервере перед отправкой. Пример AJAX-обработчика с автопереводом:

add_action('wp_ajax_wptranslate_ru_get_dynamic_content', 'wptranslate_ru_ajax_get_dynamic_content');
add_action('wp_ajax_nopriv_wptranslate_ru_get_dynamic_content', 'wptranslate_ru_ajax_get_dynamic_content');

function wptranslate_ru_ajax_get_dynamic_content() {
    $lang = sanitize_text_field($_POST['lang'] ?? 'ru');
    $content = 'Example dynamic content to translate';
    $translated = wptranslate_ru_translate_dynamic_text($content, $lang);
    wp_send_json_success(['content' => $translated]);
}

На клиенте передайте параметр lang, чтобы контролировать язык перевода.

Перевод произвольных полей и метаданных

Произвольные поля часто содержат важный динамический контент. Для их перевода можно использовать фильтр get_post_metadata или специальный вызов функции при получении данных. Пример универсального фильтра:

add_filter('get_post_metadata', 'wptranslate_ru_translate_post_meta', 10, 4);
function wptranslate_ru_translate_post_meta($value, $post_id, $meta_key, $single) {
    $lang = isset($_GET['lang']) ? sanitize_text_field($_GET['lang']) : 'ru';
    // Мы переводим только нужные мета-поля, например 'custom_description'
    if ($meta_key === 'custom_description' && !empty($value)) {
        if (is_array($value)) {
            $value[0] = wptranslate_ru_translate_dynamic_text($value[0], $lang);
            return $value;
        } else {
            return wptranslate_ru_translate_dynamic_text($value, $lang);
        }
    }
    return $value;
}

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

Рекомендации по оптимизации и кешированию

При автоматическом переводе динамического контента важно минимизировать количество запросов к внешним API, так как это влияет на скорость сайта и стоимость использования сервисов.

Используйте кеширование в БД или transient API для хранения переведённых строк. Например:

function wptranslate_ru_translate_dynamic_text_cached($text, $target_lang = 'ru') {
    if (empty($text)) return $text;
    $cache_key = 'wptranslate_ru_translate_' . md5($text . $target_lang);
    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }
    $translated = wptranslate_ru_translate_dynamic_text($text, $target_lang);
    set_transient($cache_key, $translated, DAY_IN_SECONDS);
    return $translated;
}

Это значительно ускорит работу и снизит нагрузку.

Вывод

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

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

Как использовать плагин Poliglot для автоперевода WordPress
09.03.2026
Автоматический перевод сообщений об ошибках в WordPress
12.03.2026
Как создать автоперевод шорткодов в WordPress
07.04.2026
Как прописать автоперевод в WordPress через хуки и функции
20.12.2025
Как добавить собственные скачиваемые переводы в WordPress
23.11.2025