Плагин Advanced Custom Fields (ACF) широко используется для создания кастомных полей в WordPress. Однако при работе с многоязычными сайтами возникает задача — как правильно переводить содержимое этих полей, особенно если нужно автоматизировать процесс перевода. В этой статье рассмотрим, как использовать ACF для автоматического перевода пользовательских полей, интегрируя его с популярными инструментами и реализуя собственные функции для обработки перевода.
Почему важно переводить поля ACF на многоязычном сайте WordPress
Стандартные функции перевода WordPress не всегда охватывают содержимое кастомных полей, создаваемых через ACF. Если эти поля содержат текст, который должен отображаться на нескольких языках, без правильной настройки перевода возникнет проблема — на одном языке поля будут пустыми или на другом останется исходный текст.
Особенно актуальна автоматизация перевода, если сайт регулярно обновляется или наполняется пользовательским контентом. Ручной перевод в таких случаях слишком трудозатратен и подвержен ошибкам.
Используя правильные подходы, можно связать ACF с мультиязычными плагинами и/или сервисами автоматического перевода, чтобы обеспечить качественный и своевременный перевод.
Связываем поля ACF с плагинами мультиязычности: WPML и Polylang
Использование WPML для перевода полей ACF
WPML — один из самых популярных плагинов для организации многоязычности. Он поддерживает перевод кастомных полей, если их правильно настроить.
Чтобы поля ACF стали переводимыми в WPML, нужно:
- Перейти в WPML → Настройки → Перевод полей;
- Убедиться, что нужные поля ACF отмечены как «переводимые» (Translate);
- При создании или редактировании записи использовать интерфейс WPML для добавления перевода полей.
Однако этот процесс частично ручной. Чтобы автоматизировать перевод, можно подключить сервисы типа Google Translate API и написать обработчик, который будет автоматически переводить содержимое полей при сохранении записи.
Использование Polylang с ACF
Polylang позволяет переводить кастомные поля через расширение Polylang for ACF. Для автоматического перевода также понадобится интеграция с API переводчиков и собственный код, который мы рассмотрим ниже.
Автоматический перевод полей ACF с помощью API переводчиков и собственного кода
Рассмотрим пример, как при сохранении записи автоматически переводить содержимое определённых полей ACF с русского на английский с помощью Google Translate API.
Для начала потребуется зарегистрироваться в Google Cloud, получить API ключ для Google Translate и добавить его в настройки сайта.
Пример кода для автоматического перевода полей ACF
Добавьте в functions.php вашей темы или в отдельный плагин следующий код:
function wplang_translate_text($text, $target_lang = 'en') {
$apiKey = 'ВАШ_GOOGLE_TRANSLATE_API_КЛЮЧ';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$data = array(
'q' => $text,
'target' => $target_lang,
'format' => 'text'
);
$args = array(
'body' => json_encode($data),
'headers' => array('Content-Type' => 'application/json'),
'timeout' => 15
);
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return $text; // вернуть исходный текст при ошибке
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (isset($body['data']['translations'][0]['translatedText'])) {
return $body['data']['translations'][0]['translatedText'];
}
return $text;
}
function wplang_auto_translate_acf_fields($post_id) {
// Проверяем, что это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Указываем поля для перевода
$fields_to_translate = array('your_acf_field_name');
foreach ($fields_to_translate as $field_name) {
$original_text = get_field($field_name, $post_id);
if ($original_text) {
$translated_text = wplang_translate_text($original_text, 'en');
// Сохраняем перевод в поле с суффиксом _en или в альтернативное поле
update_field($field_name . '_en', $translated_text, $post_id);
}
}
}
add_action('acf/save_post', 'wplang_auto_translate_acf_fields', 20);В этом примере при сохранении записи содержимое поля your_acf_field_name автоматически переводится на английский и сохраняется в поле с суффиксом _en. Вы можете расширить список $fields_to_translate для нескольких полей.
Как вывести переведённые поля ACF на фронтенде
Чтобы отображать переводы на сайте, нужно проверить нужный язык и вывести соответствующее поле. Например:
if (get_locale() === 'en_US') {
echo get_field('your_acf_field_name_en');
} else {
echo get_field('your_acf_field_name');
}Этот простой подход можно усложнить, интегрируя с WPML или Polylang, чтобы динамически выбирать язык и корректное поле.
Рекомендации по работе с автоматическим переводом ACF
- Используйте кеширование переводов, чтобы не вызывать API лишний раз и не увеличивать нагрузку.
- Обрабатывайте возможные ошибки API и предусмотрите fallback — вывод исходного текста.
- Настраивайте перевод только тех полей, где это действительно нужно, избегая перевода технических или числовых данных.
- Проверяйте качество перевода и корректируйте отдельные фразы вручную, если это необходимо.
Полезные плагины и инструменты для работы с ACF и переводами
- Clearfy Pro — помогает оптимизировать работу сайта, в том числе улучшая совместимость плагинов.
- WPRemark — плагин для отзывов с мультиязычной поддержкой, может быть полезен при работе с ACF-полями отзывов.
- Официальные расширения WPML и Polylang для интеграции с ACF.
Использование этих инструментов в комплексе с собственным кодом позволит сделать процесс перевода полей ACF максимально удобным и автоматизированным.