Автоматический перевод контента — востребованная функция для многих сайтов на WordPress, особенно тех, которые работают с многоязычностью. Для интеграции автопереводчиков часто используются хуки и фильтры, позволяющие перехватывать и модифицировать текст до его вывода или сохранения. В этой статье мы подробно разберём, как правильно передавать текст в автопереводчик через хуки WordPress, приведём примеры кода и дадим рекомендации по оптимизации.
Что такое хуки и почему они важны для автоперевода
Хуки — это механизмы WordPress, которые позволяют изменять стандартное поведение без правки ядра. Есть два основных типа хуков: actions (действия) и filters (фильтры). Для автоперевода чаще всего применяются фильтры, так как они позволяют изменить содержимое текста перед его выводом или сохранением.
Использование фильтров для передачи текста в автопереводчик позволяет централизованно обрабатывать весь контент сайта, будь то записи, метаданные, таксономии или даже строки интерфейса. Это даёт гибкость и контроль над процессом перевода.
Основные хуки для перехвата текста в WordPress
Рассмотрим ключевые хуки, в которые можно "вклиниться" для реализации автоперевода.
the_content— фильтр, применяемый ко всему основному содержимому записи или страницы.the_title— фильтр для заголовков записей.get_post_metadata— фильтр для метаданных записи, полезен для перевода произвольных полей.gettextиgettext_with_context— фильтры для перевода строк интерфейса, таких как кнопки и сообщения.
Сочетая эти фильтры, вы можете покрыть практически все текстовые данные на сайте.
Пример передачи текста в автопереводчик через фильтр the_content
Давайте создадим функцию, которая перехватывает содержимое записи, отправляет его в автопереводчик (эмуляция вызова API) и выводит переведённый текст.
function wptranslate_autotranslate_content($content) {
// Проверяем, нужно ли переводить контент (например, текущий язык не оригинал)
if (!function_exists('wptranslate_get_current_language')) {
return $content; // Функция определения языка не найдена — возвращаем оригинал
}
$current_lang = wptranslate_get_current_language();
if ($current_lang === 'ru') { // Предположим, оригинал на русском
return $content; // Не переводим
}
// Здесь вы бы вызвали реальный API автопереводчика, например Google Translate
$translated_text = wptranslate_fake_translate_api($content, $current_lang);
return $translated_text;
}
add_filter('the_content', 'wptranslate_autotranslate_content');
// Заглушка функции определения языка
function wptranslate_get_current_language() {
// Вернём, например, язык из сессии или куки
return isset($_GET['lang']) ? sanitize_text_field($_GET['lang']) : 'ru';
}
// Заглушка автопереводчика
function wptranslate_fake_translate_api($text, $lang) {
// Очень простой "перевод" — добавим пометку
return "[Перевод на $lang]: " . $text;
}
Этот пример демонстрирует базовый подход: текст передается в функцию автоперевода, а затем выводится переведённым. В реальном проекте нужно заменить wptranslate_fake_translate_api на вызов настоящего API.
Обработка заголовков и метаданных через хуки
Перевод заголовков и метаданных требует подключения соответствующих фильтров. Пример для заголовков:
function wptranslate_autotranslate_title($title) {
if (wptranslate_get_current_language() === 'ru') {
return $title;
}
return wptranslate_fake_translate_api($title, wptranslate_get_current_language());
}
add_filter('the_title', 'wptranslate_autotranslate_title');
Для метаданных используем фильтр get_post_metadata:
function wptranslate_autotranslate_metadata($metadata, $object_id, $meta_key, $single) {
if (wptranslate_get_current_language() === 'ru') {
return $metadata;
}
if (is_string($metadata)) {
return wptranslate_fake_translate_api($metadata, wptranslate_get_current_language());
}
return $metadata;
}
add_filter('get_post_metadata', 'wptranslate_autotranslate_metadata', 10, 4);
Эти фильтры позволят автоматически переводить не только содержимое записей, но и пользовательские поля.
Оптимизация и кеширование переводов
Автоперевод через API — затратная операция по времени и ресурсам. Чтобы избежать постоянных запросов и задержек, рекомендуем кешировать результаты перевода. Для этого можно использовать встроенный объектный кеш WordPress или внешние хранилища (Redis, Memcached).
Пример кеширования перевода в опциях:
function wptranslate_cache_translate($text, $lang) {
$cache_key = 'wptranslate_translated_' . md5($text . $lang);
$cached = get_option($cache_key);
if ($cached !== false) {
return $cached;
}
$translated = wptranslate_fake_translate_api($text, $lang);
update_option($cache_key, $translated);
return $translated;
}
Вызов этой функции вместо прямого API позволит значительно снизить нагрузку.
Использование готовых плагинов с поддержкой хуков для автоперевода
Если вы не хотите писать все с нуля, обратите внимание на плагины, которые поддерживают интеграцию с хуками и API автопереводов:
- Clearfy Pro — плагин для оптимизации и расширения функционала, в том числе с возможностями для мультиязычности.
- WPGPT — плагин с интеграцией GPT-4, который можно настроить для автоперевода через хуки.
Они предоставляют API и хуки, которые можно использовать для тонкой настройки автоперевода под ваши задачи.
Рекомендации по работе с автопереводом через хуки
- Всегда проверяйте текущий язык и избегайте перевода, если язык совпадает с оригиналом — это сэкономит ресурсы.
- Обрабатывайте только те области, где это необходимо, чтобы не влиять на производительность.
- Используйте кеширование переводов для уменьшения количества запросов к API.
- Тестируйте работу на разных типах контента: записи, заголовки, метаданные, чтобы избежать ошибок в отображении.
- При необходимости добавьте логирование для отладки процесса перевода.
Использование хуков — лучший способ интеграции автоперевода в WordPress, позволяющий гибко настраивать процесс и обеспечивать качественный результат.