Как сделать автоперевод текстов из произвольных полей в WordPress

В работе с многоязычными сайтами на WordPress часто возникает задача автоматического перевода не только контента записей и страниц, но и текстов, которые хранятся в произвольных полях (custom fields). В этой статье подробно разберём, как реализовать автоперевод текстов из произвольных полей с помощью PHP и API популярных сервисов перевода.

Почему важен перевод произвольных полей в WordPress

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

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

Выбор API для автоперевода произвольных полей

Существует множество сервисов для машинного перевода, среди которых Google Translate API, Yandex Translate API, DeepL и другие. Для примера возьмём Google Translate API, так как он широко распространён и прост для интеграции.

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

Преимущества использования Google Translate API:

  • Высокое качество перевода
  • Поддержка множества языков
  • Простая интеграция через REST API

Альтернативы:

  • Yandex Translate — имеет бесплатный тариф с ограничениями
  • DeepL — отличное качество, но не все языки доступны

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

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

function wptranslate_autotranslate_custom_field($post_id, $field_key, $target_lang, $api_key) {
    $text = get_post_meta($post_id, $field_key, true);
    if (empty($text)) {
        return false; // Нет текста для перевода
    }

    $url = 'https://translation.googleapis.com/language/translate/v2';
    $data = [
        'q' => $text,
        'target' => $target_lang,
        'format' => 'text',
        'key' => $api_key
    ];

    $response = wp_remote_post($url, [
        'body' => $data
    ]);

    if (is_wp_error($response)) {
        return false; // Ошибка запроса
    }

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

    if (isset($result['data']['translations'][0]['translatedText'])) {
        $translated_text = $result['data']['translations'][0]['translatedText'];
        // Сохраняем переведённый текст в отдельное метаполе с суффиксом языка
        update_post_meta($post_id, $field_key . '_' . $target_lang, wptranslate_sanitize_text($translated_text));
        return true;
    }

    return false;
}

function wptranslate_sanitize_text($text) {
    return sanitize_text_field(html_entity_decode($text, ENT_QUOTES));
}

В этом коде:

  • $post_id — ID поста, для которого переводим поле;
  • $field_key — ключ произвольного поля;
  • $target_lang — язык перевода в формате ISO 639-1 (например, 'ru' для русского);
  • $api_key — ваш ключ Google Translate API;
  • Результат перевод сохраняется в поле с суффиксом языка, например, description_ru.

Как интегрировать функцию в процесс сохранения записи

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

add_action('save_post', 'wptranslate_save_post_autotranslate', 20, 3);
function wptranslate_save_post_autotranslate($post_id, $post, $update) {
    // Проверяем права и тип записи
    if (wp_is_post_revision($post_id) || $post->post_type !== 'post') {
        return;
    }

    $api_key = 'ВАШ_GOOGLE_API_KEY'; // Замените на ваш ключ
    $fields_to_translate = ['custom_field_1', 'custom_field_2']; // Перечислите нужные поля
    $target_lang = 'ru'; // Целевой язык

    foreach ($fields_to_translate as $field_key) {
        wptranslate_autotranslate_custom_field($post_id, $field_key, $target_lang, $api_key);
    }
}

В этом примере мы переводим поля custom_field_1 и custom_field_2 на русский язык при сохранении записи типа post. В реальном проекте замените ключ API, имена полей и целевой язык на необходимые.

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

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

$lang = 'ru'; // или определите динамически
$translated_value = get_post_meta(get_the_ID(), 'custom_field_1_' . $lang, true);
if (!empty($translated_value)) {
    echo esc_html($translated_value);
} else {
    // fallback на оригинал
    echo esc_html(get_post_meta(get_the_ID(), 'custom_field_1', true));
}

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

Дополнительные советы и рекомендации

Оптимизация количества запросов к API

Перевод каждого поля при каждом сохранении может привести к лишним расходам и задержкам. Рекомендуется:

  • Переводить только при изменении поля;
  • Кэшировать результаты и обновлять их по необходимости;
  • Использовать пакетный перевод, если API это поддерживает.

Безопасность и хранение ключей

API-ключи лучше хранить вне кода, например, в wp-config.php или в опциях WordPress с ограниченным доступом. Никогда не публикуйте их открыто.

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

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

Итог

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

Как создать собственный шорткод для перевода в WordPress
30.11.2025
Автоматический перевод сообщений об ошибках в WordPress
12.03.2026
Автоматический перевод сообщений в формах WordPress
15.03.2026
Как перевести на WordPress пользовательские типы записей и таксономии
03.12.2025
Как использовать WPML для автоперевода страниц WordPress
09.02.2026