wplangs.ru wordpress WP Langs

Автоматический перевод шорткодoв WordPress: пошаговое руководство

Работая с многоязычными сайтами на WordPress, часто сталкиваешься с проблемой, что шорткоды, встроенные в контент, не переводятся автоматически. Это создает неудобства для пользователей и усложняет поддержку сайта. В этой статье мы разберем, как реализовать автоматический перевод шорткодoв в WordPress, используя PHP и популярные плагины, а также рассмотрим примеры кода, которые помогут решить эту задачу.

Почему шорткоды не переводятся автоматически? Особенности и ограничения

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

Например, если у вас есть шорткод [my_button text="Купить"], то параметр text="Купить" не будет переведен, если только вы не реализуете собственную логику перевода.

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

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

Плагин WPML — один из самых популярных решений для создания многоязычных сайтов на WordPress. Он поддерживает перевод многих видов контента, включая шорткоды, но требует настройки.

Чтобы перевести шорткод с параметрами, необходимо:

  • Включить поддержку строковых переводов в WPML (через String Translation).
  • Добавить параметры шорткода в строковые переводы вручную или с помощью API.
  • Использовать функции WPML для получения перевода внутри обработки шорткода.

Пример обработки шорткода с переводом через WPML:

function wplangs_render_my_button($atts) {
    $atts = shortcode_atts(array(
        'text' => __('Buy', 'wplangs'),
    ), $atts, 'my_button');

    // Получаем перевод текста через WPML
    if(function_exists('icl_t')) {
        $atts['text'] = icl_t('wplangs', 'my_button_text', $atts['text']);
    }

    return '<button>' . esc_html($atts['text']) . '</button>';
}
add_shortcode('my_button', 'wplangs_render_my_button');

В этом примере функция icl_t получает перевод строки с уникальным ключом. Далее эта строка используется внутри шорткода.

Автоматический перевод шорткодов с помощью Google Translate API

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

Пример упрощенной функции для перевода параметров шорткода:

function wplangs_translate_shortcode_atts($atts) {
    // Здесь нужно реализовать вызов Google Translate API
    // Для примера — заглушка, возвращающая тот же текст
    return $atts;
}

function wplangs_render_translated_button($atts) {
    $atts = shortcode_atts(array(
        'text' => 'Buy',
    ), $atts, 'my_button');

    $atts = wplangs_translate_shortcode_atts($atts);

    return '<button>' . esc_html($atts['text']) . '</button>';
}
add_shortcode('my_button', 'wplangs_render_translated_button');

Для полноценной интеграции необходимо зарегистрироваться в Google Cloud, получить API ключ, и реализовать запрос к API через wp_remote_post или curl. Рекомендуется кэшировать переводы, чтобы не превышать лимиты и не увеличивать нагрузку.

Перевод шорткодов с помощью плагина Clearfy Pro

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

Clearfy Pro не делает автоматический перевод, но хорошо работает в связке с WPML и другими плагинами, позволяя избежать конфликтов и ошибок.

Практические советы по работе с переводом шорткодов

  • Используйте gettext функции. Внутри шорткодов применяйте __() и _e() для всех текстовых параметров, чтобы они попали в систему перевода.
  • Избегайте хардкода текста внутри параметров. Лучше передавать ключи или идентификаторы, а перевод получать через функции локализации.
  • Кэшируйте переводы. Если используете API переводов, сохраняйте результаты в transient или опции, чтобы снизить количество запросов.
  • Проверяйте совместимость плагинов. Некоторые плагины для переводов не поддерживают автоматический перевод шорткодов, поэтому тестируйте разные варианты.
  • Используйте фильтр do_shortcode_tag. Можно перехватывать вызовы шорткодов и обрабатывать их параметры перед рендером.

Пример перехвата шорткода для динамического перевода

add_filter('do_shortcode_tag', 'wplangs_filter_shortcode_translation', 10, 4);
function wplangs_filter_shortcode_translation($output, $tag, $attr, $m) {
    if($tag === 'my_button' && !empty($attr['text'])) {
        // Здесь можно вставить логику перевода, например, через API или локализацию
        $attr['text'] = __('Купить', 'wplangs');
        // Повторный вызов шорткода с переведённым параметром
        $output = do_shortcode('[my_button text="' . esc_attr($attr['text']) . '"]');
    }
    return $output;
}

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

Итог

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

Для большинства проектов достаточно интеграции с WPML или Polylang и ручного добавления переводов в строковые переводы. Если требуется автоматизация, стоит рассмотреть использование Google Translate API или других сервисов в связке с кастомными функциями WordPress.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше