Диагностика проблемы с переводом атрибутов WooCommerce
Атрибуты товаров в WooCommerce — это отдельный тип таксономий, которые часто остаются без перевода при настройке мультиязычности, особенно если используется кастомный автоперевод или нестандартные плагины. Проблемы проявляются так:
- Атрибуты отображаются на всех языках на оригинальном языке;
- При автопереводе описание или название атрибута не меняются;
- Переводы атрибутов не попадают в поисковую индексацию;
- Ссылки на архивы атрибутов ведут на неверный язык.
Для диагностики проверьте, что атрибуты созданы как таксономии WooCommerce (wp_terms, wp_term_taxonomy) и не хранятся в произвольных полях.
Почему автоперевод атрибутов WooCommerce требует отдельной настройки
Атрибуты — это не просто текстовые поля, а объекты с названием, описанием и слагом. Стандартные автопереводчики обычно работают с контентом постов и страниц, но не всегда умеют обрабатывать таксономии WooCommerce. Потому нужно прописать явный вызов перевода этих таксономий и записать переведённые значения обратно в базу.
Типичные сценарии использования
- Перевод названий атрибутов (например, «Цвет» -> «Color»).
- Перевод значений атрибутов (например, «Красный» -> «Red»).
- Перевод описаний атрибутов, которые отображаются в фильтрах или на страницах товаров.
Пошаговое решение для автоматического перевода атрибутов WooCommerce
1. Получение списка атрибутов и их терминов
Используем стандартные функции WooCommerce для получения атрибутов и терминов:
$attributes = wc_get_attribute_taxonomies();
foreach ( $attributes as $attribute ) {
$taxonomy = wc_attribute_taxonomy_name( $attribute->attribute_name );
$terms = get_terms( array('taxonomy' => $taxonomy, 'hide_empty' => false) );
// далее обрабатываем термины
}
2. Интеграция с автопереводчиком (пример с Google Translate API)
Вызов API перевода для названий и описаний терминов. Пример минимальной функции автоперевода:
function translate_text_google( $text, $target_lang ) {
$api_key = 'ВАШ_GOOGLE_API_КЛЮЧ';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;
$data = array(
'q' => $text,
'target' => $target_lang,
'format' => 'text'
);
$response = wp_remote_post( $url, array(
'body' => json_encode( $data ),
'headers' => array('Content-Type' => 'application/json')
));
if ( is_wp_error( $response ) ) {
return false;
}
$body = json_decode( wp_remote_retrieve_body( $response ), true );
return $body['data']['translations'][0]['translatedText'] ?? false;
}
3. Обновление переведённых значений в таксономиях WooCommerce
После получения перевода обновляем названия терминов и описания в базе:
foreach ( $terms as $term ) {
$new_name = translate_text_google( $term->name, 'en' ); // пример перевода на английский
$new_description = translate_text_google( $term->description, 'en' );
if ( $new_name ) {
wp_update_term( $term->term_id, $taxonomy, array(
'name' => $new_name,
'description' => $new_description
));
}
}
4. Автоматизация процесса через wp-cron
Чтобы не выполнять перевод вручную, создайте cron-задачу:
if ( ! wp_next_scheduled( 'auto_translate_woocommerce_attributes' ) ) {
wp_schedule_event( time(), 'daily', 'auto_translate_woocommerce_attributes' );
}
add_action( 'auto_translate_woocommerce_attributes', 'auto_translate_attributes_callback' );
function auto_translate_attributes_callback() {
// ваш код из шага 1-3
}
Проверка результата после внедрения
- Перейдите в админку WooCommerce > Атрибуты, проверьте, что названия и описания атрибутов переведены.
- Посмотрите на странице товара, что атрибуты отображаются на нужном языке.
- Используйте локальный переключатель языка (если есть) и убедитесь, что слаги и описания изменяются.
- Проверьте в базе данных таблицы
wp_termsиwp_term_taxonomy— переводы должны сохраниться там.
Частые ошибки и как их исправить
- Ошибка: Перевод не сохраняется в базе.
Причина: Использованиеwp_update_termбез правильных прав или конфликт плагинов.
Решение: Проверьте права пользователя и отключите плагины, которые могут блокировать изменения таксономий. - Ошибка: Атрибуты показываются на одном языке во фронтенде.
Причина: Кэширование страниц или отсутствие поддержки мультиязычности у темы.
Решение: Очистите кэш, проверьте поддержку темы и правильность переключателя языка. - Ошибка: Перевод текста возвращается как HTML-сущности.
Причина: Некорректная обработка response API.
Решение: Используйтеhtml_entity_decode()для переведённого текста перед сохранением.
Практические советы по безопасности и производительности
- Ограничьте частоту вызова API перевода, чтобы не превысить лимиты и не получить блокировку.
- Кешируйте результаты перевода в отдельном transient или таблице для повторных вызовов.
- Обрабатывайте ошибки API корректно, чтобы не ломать работу сайта.
- Используйте nonce и права доступа при запуске крон-задач для безопасности.
- Для больших магазинов разбивайте перевод по партиям — это снизит нагрузку на сервер.
Сравнение подходов к автопереводу атрибутов WooCommerce
| Подход | Плюсы | Минусы | Пример |
|---|---|---|---|
| Плагин автоперевода (WPML, Polylang) | Простая установка, поддержка интерфейса | Платно, может не перевести кастомные поля | WPML с модулем для WooCommerce |
| Ручной перевод терминов | Точный контроль | Трудозатратно, не подходит для больших магазинов | Редактирование в админке |
| Кастомный скрипт с API Google Translate | Автоматизация, гибкость | Требует навыков программирования, расходы на API | Код из этой статьи |