В WordPress часто возникает задача не только перевода основного контента, но и метаданных — произвольных полей, которые содержат важную информацию о записи. В этой статье мы разберём, как можно реализовать автоматический перевод метаданных в WordPress, используя как готовые плагины, так и собственные функции с интеграцией популярных API переводов.
Почему важен автоперевод метаданных в WordPress
Метаданные — это дополнительная информация, хранящаяся в записях, страницах или пользовательских типах записей. Например, в интернет-магазине это могут быть характеристики товара, в блоге — авторские заметки, а в портфолио — описание проектов.
Если сайт многоязычный, переводить метаданные вручную неудобно, особенно при большом объёме. Автоматический перевод позволяет значительно сократить время и избежать ошибок.
При этом важно, чтобы перевод был корректно связанный с нужным языком и обновлялся при изменении исходного текста.
Используемые плагины для автоперевода метаданных
Среди популярных инструментов для автоперевода контента и метаданных стоит отметить:
- WPGPT — плагин на базе GPT-4, который может переводить любые тексты, включая произвольные поля;
- Clearfy Pro — оптимизирует работу сайта и поддерживает расширенные функции мультиязычности;
- DeepL API — можно интегрировать вручную или через плагины для качественного машинного перевода;
- Google Cloud Translate API — популярный и мощный сервис для перевода.
Для автоперевода метаданных потребуется либо готовый плагин с поддержкой произвольных полей, либо создание собственного функционала.
Создание собственного функционала автоперевода метаданных в WordPress
Рассмотрим пример, как через хук сохранять перевод метаданных при обновлении записи. Для примера используем API DeepL, но вы можете заменить на любой другой.
Подготовка: регистрация и получение API-ключа DeepL
Для работы с API DeepL необходимо зарегистрироваться на официальном сайте DeepL и получить ключ API.
Пример функции автоперевода метаданных
function wptranslate_autotranslate_meta($post_id) {
// Проверяем, чтобы это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// Получаем исходный метаданные
$original_meta_key = '_product_description';
$translated_meta_key = '_product_description_en';
$text_to_translate = get_post_meta($post_id, $original_meta_key, true);
if (empty($text_to_translate)) return;
// Ваш API ключ DeepL
$api_key = 'ВАШ_API_КЛЮЧ';
$url = 'https://api-free.deepl.com/v2/translate';
$data = [
'auth_key' => $api_key,
'text' => $text_to_translate,
'target_lang' => 'EN'
];
$response = wp_remote_post($url, [
'body' => $data
]);
if (is_wp_error($response)) {
return;
}
$body = wp_remote_retrieve_body($response);
$result = json_decode($body, true);
if (isset($result['translations'][0]['text'])) {
update_post_meta($post_id, $translated_meta_key, $result['translations'][0]['text']);
}
}
add_action('save_post', 'wptranslate_autotranslate_meta');Данная функция срабатывает при сохранении записи, берет значение из метаполя _product_description, отправляет его на перевод в DeepL и сохраняет результат в _product_description_en.
Особенности и рекомендации
- Всегда проверяйте, что перевод происходит не на автосохранениях и не вызывает бесконечный цикл сохранений.
- Для нескольких метаданных создайте аналогичные функции или расширьте текущую.
- Для уменьшения нагрузки используйте кэширование результатов.
- Поддерживайте актуальность ключей и API, проверяйте лимиты запросов.
Как интегрировать автоперевод в шаблоны и виджеты WordPress
После перевода метаданных нужно корректно выводить их в зависимости от выбранного языка. Предположим, что текущий язык хранится в переменной $current_lang. Тогда можно использовать такой код:
function wptranslate_get_translated_meta($post_id, $meta_key, $current_lang) {
if ($current_lang === 'en') {
$translated_key = $meta_key . '_en';
$translated_value = get_post_meta($post_id, $translated_key, true);
if (!empty($translated_value)) {
return $translated_value;
}
}
return get_post_meta($post_id, $meta_key, true);
}Используйте эту функцию в шаблонах для вывода метаданных с учетом языка:
$description = wptranslate_get_translated_meta(get_the_ID(), '_product_description', $current_lang);
echo esc_html($description);Так вы будете показывать переведённые метаданные, если они есть, или оригинал — если перевода нет.
Дополнительные советы по работе с автопереводом в WordPress
Обработка ошибок и логирование
В продакшн-среде важно вести лог ошибок API, чтобы отслеживать сбои и корректно их обрабатывать. Для этого можно использовать встроенный класс WP_Error или внешние системы логирования.
Оптимизация производительности
Автоматический перевод — это внешние запросы, которые могут замедлить сохранение записи. Рекомендуется выполнять перевод в фоне через WP-Cron или очереди задач, чтобы не блокировать пользователя.
Поддержка мультиязычных плагинов
Если ваш сайт использует WPML, Polylang или похожие плагины, стоит интегрировать автоперевод метаданных с их API, чтобы синхронизировать переводы с основным контентом.
Заключение
Автоматический перевод метаданных в WordPress — важный элемент при создании многоязычных сайтов с большим количеством дополнительной информации. Используя API популярных сервисов и правильную архитектуру кода, вы можете автоматизировать этот процесс, значительно упростив управление контентом.
Для быстрого старта рекомендуем обратить внимание на плагин WPGPT, который уже содержит готовые инструменты для автоперевода с поддержкой произвольных полей и интеграцию с GPT-4.