Диагностика проблемы с переводом статусов заказов WooCommerce
Стандартные статусы заказов WooCommerce, такие как processing, completed, on-hold, обычно переводятся автоматически при локализации сайта. Но дополнительные или кастомные статусы, а также сообщения, связанные с ними, часто остаются на исходном языке. Это приводит к неполной мультиязычности и ухудшает пользовательский опыт.
Проблема проявляется в следующих случаях:
- Вы добавили собственные статусы заказов через код или плагин.
- Используете мультиязычные плагины, которые не поддерживают перевод пользовательских статусов.
- Переводы WooCommerce устарели или отсутствуют для кастомных статусов.
Как WooCommerce работает со статусами заказов и их переводом
Статусы заказов регистрируются через функцию register_post_status() с параметрами, включая ярлыки (label и label_count). Для локализации необходимо, чтобы эти ярлыки были обернуты функцией __() или _x().
Для перевода кастомных статусов также нужно зарегистрировать их с локализуемыми ярлыками и добавить перевод в .po/.mo файлы темы или плагина, либо использовать фильтры для динамического перевода.
Пошаговое решение: правильный перевод кастомных статусов заказов
1. Добавление кастомного статуса с переводом
function wptranslate_register_custom_order_status() {
register_post_status( 'wc-awaiting-payment', array(
'label' => _x( 'Ожидание оплаты', 'Order status', 'woocommerce' ),
'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>', 'woocommerce' )
) );
}
add_action( 'init', 'wptranslate_register_custom_order_status' );2. Добавление статуса в список доступных статусов WooCommerce
function wptranslate_add_custom_order_statuses( $order_statuses ) {
$order_statuses['wc-awaiting-payment'] = _x( 'Ожидание оплаты', 'Order status', 'woocommerce' );
return $order_statuses;
}
add_filter( 'wc_order_statuses', 'wptranslate_add_custom_order_statuses' );3. Перевод в файлах локализации
Убедитесь, что в используемой локали (.po/.mo) есть переводы для «Ожидание оплаты». Можно использовать Poedit или Loco Translate для проверки и добавления.
Проверка результата после внедрения
- Создайте заказ и установите ему новый статус
awaiting-payment. - Проверьте в админке WooCommerce на странице заказов, что статус отображается корректно на выбранном языке.
- Посмотрите на странице пользователя (если выводите статусы) — перевод должен быть виден.
- Используйте
wpml-string-translationили аналогичный модуль, если применяете WPML, чтобы убедиться, что строка доступна для перевода.
Частые ошибки и как их исправить
- Статус отображается в оригинале, а не переведен: отсутствует перевод в .po/.mo или строка не обернута в
__(). - Статус не появляется в списке заказов: не добавлен в фильтр
wc_order_statuses. - Проблемы с кэшированием: кэш страниц или объекта может показывать старый текст — очистите кэш.
- Конфликт с плагинами мультиязычности: проверьте, поддерживает ли плагин кастомные статусы, и синхронизируйте переводы.
Практические советы по безопасности и производительности
- Не храните переводы статусов напрямую в базе без i18n — используйте встроенные механизмы WordPress.
- Для больших сайтов с WooCommerce кешируйте результаты с помощью Transients API, чтобы не перегружать БД.
- При использовании мультиязычных плагинов обновляйте переводы и синхронизируйте строки через их интерфейс.
- Избегайте дублирования функций регистрации статусов — используйте хуки и фильтры корректно.
Сравнение способов перевода статусов заказов WooCommerce
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Регистрация с функциями i18n и .po/.mo | Полная интеграция, поддержка любых языков | Требует работы с файлами перевода | Кастомные статусы в плагинах/темах |
| Фильтр wc_order_statuses с динамическим переводом | Просто и быстро, можно менять на лету | Ограничено строками, нужен дополнительный перевод | Небольшие изменения или быстрая правка |
| Перевод через плагины мультиязычности | Удобный интерфейс, автоматизация | Зависимость от плагина, возможны конфликты | Сложные мультиязычные сайты |