Как создать автоперевод шорткодов в WordPress

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

Почему автоперевод шорткодов в WordPress — сложная задача

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

Основные сложности:

  • Определение текста для перевода внутри шорткода.
  • Передача текста в переводчик и получение результата.
  • Обеспечение кеширования перевода для производительности.
  • Корректная замена исходного текста на переведённый.

Рассмотрим эти моменты на примерах.

Как перехватить вывод шорткода для перевода

Самый простой способ — обернуть функцию шорткода в фильтр, который будет запускать автоперевод. Предположим, у нас есть шорткод [wptranslate_greeting], который выводит приветствие:

function wptranslate_greeting_shortcode() {
    return 'Hello, welcome to our site!';
}
add_shortcode('wptranslate_greeting', 'wptranslate_greeting_shortcode');

Чтобы добавить автоперевод, создадим функцию автоперевода и применим её к выводу шорткода:

function wptranslate_autotranslate_text($text, $target_lang = 'ru') {
    // Здесь можно интегрировать API перевода, например, DeepL или Google Translate
    // Для примера вернём текст с пометкой
    return '[Перевод на ' . $target_lang . ']: ' . $text;
}

function wptranslate_greeting_autotranslate_shortcode() {
    $original = wptranslate_greeting_shortcode();
    $translated = wptranslate_autotranslate_text($original, get_locale());
    return $translated;
}
remove_shortcode('wptranslate_greeting');
add_shortcode('wptranslate_greeting', 'wptranslate_greeting_autotranslate_shortcode');

Так мы заменили стандартный шорткод на версию с автопереводом. В реальном проекте функцию wptranslate_autotranslate_text нужно заменить на вызов API перевода.

Интеграция с Google Translate API

Для реального автоперевода можно использовать Google Translate API. Вот упрощённый пример вызова:

function wptranslate_autotranslate_text($text, $target_lang = 'ru') {
    $api_key = 'ВАШ_API_КЛЮЧ';
    $url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;
    $data = [
        'q' => $text,
        'target' => $target_lang
    ];

    $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'])) {
        return $body['data']['translations'][0]['translatedText'];
    }

    return $text;
}

Не забудьте заменить ВАШ_API_КЛЮЧ на свой ключ Google Cloud Translate.

Автоматизация автоперевода для произвольных шорткодов

Если на сайте много шорткодов, можно написать универсальный фильтр, который будет перехватывать их вывод и переводить автоматически. Для этого воспользуемся хуком do_shortcode_tag или фильтром the_content с функцией, которая распознаёт шорткоды и переводит их содержимое.

Пример универсального фильтра:

function wptranslate_autotranslate_shortcodes($content) {
    // Паттерн поиска шорткодов
    $pattern = get_shortcode_regex();

    return preg_replace_callback('/' . $pattern . '/s', function($matches) {
        $shortcode = $matches[0];
        $tag = $matches[2];
        $atts = shortcode_parse_atts($matches[3]);

        // Вызываем оригинальный шорткод для получения текста
        $output = do_shortcode($shortcode);

        // Переводим вывод
        return wptranslate_autotranslate_text($output, get_locale());

    }, $content);
}
add_filter('the_content', 'wptranslate_autotranslate_shortcodes', 20);

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

Как кешировать переводы для производительности

Каждый вызов API перевода — это задержка и расход ресурсов. Чтобы избежать частых обращений, реализуем кеширование переведённого текста.

Пример кеширования с использованием Transients API:

function wptranslate_autotranslate_text_cached($text, $target_lang = 'ru') {
    $cache_key = 'wptranslate_trans_' . md5($text . $target_lang);
    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }
    $translated = wptranslate_autotranslate_text($text, $target_lang);
    set_transient($cache_key, $translated,  DAY_IN_SECONDS * 7);
    return $translated;
}

Используйте эту функцию вместо прямого вызова wptranslate_autotranslate_text, чтобы повысить скорость и снизить нагрузку.

Использование плагинов для автоперевода шорткодов

Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:

  • TranslatePress — поддерживает перевод содержимого, в том числе шорткодов, с визуальным редактором.
  • Polylang Pro — расширенная версия Polylang с поддержкой динамического контента.
  • WPML String Translation — позволяет перевести строки, включая те, что выводятся шорткодами.

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

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

function wptranslate_wpml_autotranslate_shortcode($output, $original, $name) {
    if ($name === 'wptranslate_greeting') {
        // Проверяем язык и вызываем автоперевод
        $current_lang = apply_filters('wpml_current_language', null);
        if ($current_lang && $current_lang !== 'en') {
            return wptranslate_autotranslate_text_cached($original, $current_lang);
        }
    }
    return $output;
}
add_filter('wpml_translate_single_string', 'wptranslate_wpml_autotranslate_shortcode', 10, 3);

Так можно комбинировать мощь WPML и автоматический перевод контента шорткодов.

Резюме и рекомендации

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

  • Простой перехват конкретных шорткодов и перевод их вывода.
  • Универсальный фильтр для всех шорткодов с проверкой контекста.
  • Использование готовых плагинов с интеграцией автоперевода.

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

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

Как добавить автоперевод сообщений об ошибках в WordPress
19.01.2026
Как использовать WPML для автоперевода страниц WordPress
09.02.2026
Как добавить автоперевод в WP Remark для WordPress
29.01.2026
Как создать собственный шорткод для перевода в WordPress
30.11.2025
Как перевести на WordPress пользовательские типы записей и таксономии
03.12.2025