В современных многоязычных сайтах на WordPress часто возникает необходимость не только перевести статический контент, но и обеспечить автоматический перевод динамически изменяемых данных. Это могут быть комментарии, отзывы, пользовательские метаданные, результаты форм и AJAX-запросов. В этой статье подробно разберём, как с помощью хуков и AJAX автоматизировать перевод динамического контента в WordPress, а также рассмотрим примеры кода и полезные плагины.
Почему динамический контент требует особого подхода к переводу
Статический контент обычно переводится один раз через файловые локализации (.po/.mo), плагины типа WPML или Polylang, либо с помощью автопереводчиков при сохранении записи. Но динамический контент генерируется или изменяется на лету — например, отзывы пользователей, AJAX-запросы к серверу, вывод данных из произвольных полей или настроек, которые меняются без перезагрузки страницы. Перевод такого контента требует динамического подхода, иначе посетители увидят информацию только на одном языке.
Для решения этой задачи WordPress предоставляет мощный инструмент — хуки (actions и filters), которые позволяют перехватывать и модифицировать данные перед выводом. В связке с AJAX можно реализовать автоматический перевод контента в режиме реального времени.
Кроме того, важно учитывать производительность и кеширование — перевод не должен замедлять работу сайта.
Использование хуков для автоматического перевода динамического контента
Хуки позволяют вмешиваться в процесс вывода текста и заменять его на переведённый вариант. Для динамического контента рекомендуем использовать фильтры, которые применяются к выводимым данным.
Например, предположим, что у вас есть функция, которая выводит название товара из произвольного поля. Чтобы автоматически перевести это название, можно добавить фильтр, который будет вызывать ваш автопереводчик.
Пример фильтра для автоперевода произвольного поля
function wptranslate_autotranslate_meta($value, $meta_key, $post_id) {
if ($meta_key === 'product_name') {
$translated = wptranslate_translate_text($value);
return $translated;
}
return $value;
}
add_filter('get_post_metadata', 'wptranslate_autotranslate_meta', 10, 3);
function wptranslate_translate_text($text) {
// Здесь вызов API автоперевода, например, DeepL или Google Translate
// Для демонстрации возвращаем исходный текст с пометкой
return '[Перевод] ' . $text;
}В этом примере фильтр get_post_metadata перехватывает получение метаданных и переводит значение с ключом product_name.
Автоматический перевод AJAX-запросов в WordPress
Если динамический контент загружается через AJAX, то перевод нужно делать на сервере, а клиенту отдавать уже переведённый текст. Для этого создайте обработчик AJAX, где можно вызвать функцию автоперевода.
add_action('wp_ajax_wptranslate_translate_ajax', 'wptranslate_translate_ajax_handler');
add_action('wp_ajax_nopriv_wptranslate_translate_ajax', 'wptranslate_translate_ajax_handler');
function wptranslate_translate_ajax_handler() {
$text = isset($_POST['text']) ? sanitize_text_field($_POST['text']) : '';
$translated = wptranslate_translate_text($text);
wp_send_json_success(['translated' => $translated]);
}На стороне клиента через JavaScript отправьте AJAX-запрос с исходным текстом и получите переведённый ответ.
jQuery.post(ajaxurl, {
action: 'wptranslate_translate_ajax',
text: originalText
}, function(response) {
if (response.success) {
jQuery('#translated-content').text(response.data.translated);
}
});Практические рекомендации и популярные плагины для автоперевода динамического контента
Для автоматизации перевода динамического контента можно использовать готовые решения, которые интегрируются с хуками и AJAX:
- Clearfy Pro — содержит функции оптимизации и управления переводами, включая автоперевод через API DeepL или Google.
- WPRemark — позволяет автоматически переводить комментарии и отзывы пользователей.
- Poliglot — мультиязычный плагин с поддержкой автоперевода и API для динамического контента.
Для интеграции с этими плагинами можно использовать собственные хуки и AJAX-обработчики, расширяя функциональность под свои задачи.
Как организовать кеширование переведённого динамического контента
Чтобы не делать повторных запросов к API автоперевода и не замедлять сайт, рекомендуем кешировать переводы. Это можно реализовать с помощью transient API WordPress или сохранять переводы в отдельные метаполя.
function wptranslate_translate_text_with_cache($text) {
$cache_key = 'wptranslate_' . md5($text);
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$translated = wptranslate_translate_text($text);
set_transient($cache_key, $translated, DAY_IN_SECONDS);
return $translated;
}Такой подход значительно улучшит производительность при частых обращениях к одному и тому же тексту.
Итоги
Автоматизация перевода динамического контента WordPress — задача непростая, но решаемая с помощью хуков, AJAX и грамотного кеширования. Используйте встроенные фильтры WordPress для перехвата данных, AJAX для обработки запросов на лету и кеширование, чтобы ускорить работу сайта. Подключайте проверенные плагины с поддержкой автоперевода и расширяйте их функционал собственным кодом.
Для изучения и примеров рекомендуем ознакомиться с плагинами Clearfy Pro и WPRemark.