Диагностика проблемы с переводом статусов заказов WooCommerce
Многие разработчики и владельцы WooCommerce сталкиваются с проблемой: статусы заказов отображаются только на основном языке, несмотря на установленный многоязычный плагин. Это происходит потому, что WooCommerce статусы не всегда корректно подключаются к системе перевода, особенно если используются кастомные статусы или автопереводчики без правильной настройки.
Проверьте, как именно выводятся статусы заказов на вашем сайте. Часто статусы берутся напрямую из массива $order->get_status(), который возвращает slug статуса, а не переведённое имя. Если в шаблонах не используется функция, которая переводит эти значения, вы увидите оригинальные названия.
Пошаговое решение: как добавить корректный перевод статусов заказов WooCommerce
1. Используйте функцию wc_get_order_status_name() для вывода статусов
WooCommerce предоставляет удобную функцию wc_get_order_status_name( $status ), которая возвращает человекочитаемое и локализованное имя статуса. В шаблонах и плагинах замените прямой вывод статуса на:
$order_status = wc_get_order_status_name( $order->get_status() );
echo esc_html( $order_status );Это гарантирует, что будут использованы правильные переводы из языковых файлов WooCommerce.
2. Добавьте перевод кастомных статусов с помощью register_post_status() и локализации
Если у вас есть кастомные статусы заказов, зарегистрируйте их так:
register_post_status( 'wc-custom-status', array(
'label' => _x( 'Обработка', 'Order status', 'your-textdomain' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Обработка <span class="count">(%s)</span>', 'Обработка <span class="count">(%s)</span>', 'your-textdomain' ),
) );Обязательно добавьте переводы для вашего текстового домена в .po/.mo файлы или используйте плагины типа Loco Translate для корректной локализации.
3. Принудительно зарегистрируйте переводы для статусов в Polylang или WPML
Если вы используете Polylang или WPML, убедитесь, что переводы для статусов добавлены в строковые переводы. В WPML это делается через String Translation, в Polylang - через перевод строк в настройках.
Проверка результата после внедрения изменений
1. Перейдите в админку WooCommerce > Заказы и проверьте отображение статусов в списке заказов. Статусы должны отображаться на выбранном языке.
2. На фронтенде зайдите в страницу заказа (например, страница «Мои заказы») и убедитесь, что статусы заказов отображаются корректно на нужном языке.
3. Используйте wpml-string-translation или аналогичный инструмент вашего плагина для проверки, что строки статусов переведены.
Частые ошибки при переводе статусов заказов WooCommerce
- Вывод статуса через
$order->get_status()без использованияwc_get_order_status_name(). В результате вместо перевода выводится slug статуса. - Отсутствие перевода кастомных статусов в файлах .po/.mo. Даже если статус зарегистрирован, его название не переводится без соответствующих локализаций.
- Плагины мультиязычности не настроены на перевод строк статусов. Нужно добавить строки в систему перевода вручную.
- Использование кастомных функций или плагинов, которые напрямую выводят статусы без поддержки локализации.
Практические советы по безопасности и производительности
- Не редактируйте напрямую файлы WooCommerce или плагинов мультиязычности — используйте дочерние темы или собственные плагины для добавления кода.
- Для вывода статусов используйте всегда готовые API WooCommerce, чтобы избежать проблем с совместимостью при обновлениях.
- Оптимизируйте переводы, не дублируйте строки и не создавайте избыточных кастомных статусов без необходимости.
- Для оптимизации загрузки сайта используйте кеширование переведённых строк (например, через WP Rocket, Clearfy Pro из WPShop), чтобы уменьшить количество запросов к базе данных.
Сравнение вариантов работы с переводами статусов WooCommerce
| Метод | Преимущества | Недостатки |
|---|---|---|
Вывод $order->get_status() напрямую | Просто использовать, без дополнительного кода | Нет перевода, выводится slug |
Использование wc_get_order_status_name() | Полная локализация, поддержка стандартных и кастомных статусов | Требует замены кода в шаблонах |
Кастомная регистрация статусов с register_post_status() | Полный контроль над статусами, возможность локализации | Необходимость создания и поддержки переводов |
| Перевод строк через WPML/Polylang | Удобный интерфейс для переводчиков, интеграция с мультиязычностью | Требует ручного добавления и поддержки строк |