Advanced Custom Fields (ACF) — один из самых популярных плагинов для создания кастомных полей в WordPress. Однако при работе с мультиязычными сайтами на базе WordPress часто возникает вопрос: как правильно настроить и использовать поля ACF, чтобы обеспечить корректный и удобный мультиязычный контент? В этой статье подробно разберем практические аспекты работы с ACF в мультиязычной среде, рассмотрим примеры кода и советы по интеграции с популярными плагинами перевода.
Почему ACF важен для мультиязычных сайтов WordPress
ACF позволяет добавлять в записи, страницы и другие типы контента дополнительные поля с любой структурой — текстовые, числовые, выбор, изображения и т.д. Это дает возможность создавать сложные и гибкие структуры контента.
В мультиязычном сайте важно, чтобы данные полей корректно переводились и отображались в зависимости от выбранного языка. Если этого не сделать, можно получить ситуацию, когда переводится только базовый текст записи, а пользовательские поля остаются на языке оригинала.
ACF не имеет встроенной поддержки мультиязычности, поэтому для работы с переводами полей нужно применять дополнительные техники и плагины.
Интеграция ACF с плагинами перевода: WPML и Polylang
Два самых популярных плагина для мультиязычности — WPML и Polylang — имеют свои подходы к работе с ACF.
WPML и ACF
WPML позволяет синхронизировать поля ACF между переводами, а также переводить значения полей вручную или автоматически.
Чтобы обеспечить правильную работу, нужно:
- Включить поддержку ACF в настройках WPML (раздел "Перевод типа записи и таксономий").
- Использовать аддон WPML String Translation для перевода строк из полей.
- Переводить поля вручную в интерфейсе переводов или использовать автоматический перевод для текстовых полей.
При этом важно учитывать, что для сложных полей (например, повторяющиеся или групповые) потребуется дополнительная настройка и проверка корректности перевода.
Polylang и ACF
Polylang не имеет официальной интеграции с ACF, но существует плагин Polylang for ACF, который добавляет возможность копировать и синхронизировать поля между языками.
В других случаях приходится вручную дублировать записи и заполнять поля на каждом языке, либо использовать пользовательские решения для синхронизации.
Практические советы по работе с ACF в мультиязычном WordPress
Далее рассмотрим несколько советов и примеров кода, позволяющих правильно работать с ACF-полями на мультисайтах и мультиязычных сайтах.
1. Использование поля locale для хранения языка
Можно добавить в поля ACF специальное поле locale, чтобы хранить язык записи. Это полезно, если вы хотите вручную обрабатывать вывод полей в зависимости от языка.
Пример создания поля locale:
if( function_exists('wp_lang_acf_add_locale_field') ) {
function wp_lang_acf_add_locale_field() {
acf_add_local_field_group(array(
'key' => 'group_locale',
'title' => 'Язык записи',
'fields' => array(
array(
'key' => 'field_locale',
'label' => 'Язык',
'name' => 'locale',
'type' => 'text',
'default_value' => get_locale()
)
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'post'
),
),
),
));
}
add_action('acf/init', 'wp_lang_acf_add_locale_field');
}2. Вывод полей ACF с учетом языка
Чтобы выводить поля только для текущего языка, можно написать функцию-обертку, которая проверяет язык и выводит значение поля:
function wplang_get_acf_field_multilang($field_name, $post_id = null) {
if (!$post_id) {
$post_id = get_the_ID();
}
$current_locale = get_locale();
$field_value = get_field($field_name, $post_id);
// Дополнительная логика для выбора перевода или fallback
return $field_value;
}Такую функцию можно расширить, чтобы она брала значение из связанного перевода записи, если поле пустое.
3. Копирование полей при создании перевода
При использовании WPML можно автоматически копировать значения полей ACF при создании перевода, чтобы не вводить их заново. Для этого в настройках WPML укажите, какие поля должны копироваться.
Если нужно сделать это программно, можно использовать хук WPML:
add_action('wpml_translation_saved', 'wplang_copy_acf_fields_on_translation', 10, 3);
function wplang_copy_acf_fields_on_translation($master_post_id, $translation_post_id, $lang) {
$fields = get_fields($master_post_id);
if ($fields) {
foreach ($fields as $key => $value) {
update_field($key, $value, $translation_post_id);
}
}
}Использование плагина Clearfy Pro для оптимизации мультиязычности ACF
Плагин Clearfy Pro содержит опции для оптимизации работы WordPress и совместимости с плагинами перевода, включая настройку кеширования и отключение лишних скриптов, что особенно полезно на мультиязычных сайтах с ACF.
Clearfy позволяет:
- Оптимизировать загрузку скриптов и стилей ACF только на нужных страницах.
- Отключить автоматические обновления для плагинов перевода, чтобы избежать конфликтов.
- Настроить исключения для кеширования контента с динамическими полями.
Примеры использования ACF для мультиязычного контента
Рассмотрим простой пример: у вас есть кастомное поле "Описание продукта" (product_description), которое нужно выводить на странице продукта в зависимости от языка.
В шаблоне можно использовать следующий код:
$description = wplang_get_acf_field_multilang('product_description', get_the_ID());
echo esc_html($description);Если вы используете WPML, то функция wplang_get_acf_field_multilang дополняется логикой для получения перевода через WPML API.
Другой пример: если у вас есть повторяющиеся поля (repeater) с характеристиками, то для мультиязычности нужно убедиться, что каждая строка переведена и корректно отображается:
if( have_rows('product_features') ) {
echo '<ul>';
while ( have_rows('product_features') ) {
the_row();
$feature = get_sub_field('feature_name');
echo '<li>' . esc_html($feature) . '</li>';
}
echo '</ul>';
}Для перевода таких полей WPML позволяет переводить каждый элемент повторителя отдельно.
Заключение по использованию ACF на мультиязычных сайтах
Использование ACF для создания мультиязычного контента в WordPress требует внимательного подхода к настройкам плагинов перевода и логике вывода полей. Важно:
- Выбирать совместимые плагины и версии.
- Понимать, как синхронизировать и переводить поля.
- Использовать вспомогательные функции и хуки для автоматизации.
- Оптимизировать работу сайта с помощью инструментов, таких как Clearfy Pro.
Таким образом, ACF вместе с правильными настройками и плагинами позволяет создавать действительно гибкие и удобные мультиязычные сайты на WordPress.