В работе с многоязычными сайтами на 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 переводчиков и добавление соответствующих функций в тему или плагин. Это помогает создавать полноценно мультиязычные сайты с учётом всех элементов контента, улучшая опыт пользователей и расширяя аудиторию.