Как правильно перевести статусы заказов WooCommerce в WordPress

Проблема с переводом статусов заказов WooCommerce

WooCommerce использует фиксированные статусы заказов (например, processing, completed, on-hold) для управления жизненным циклом заказов. По умолчанию эти статусы выводятся на языке сайта, но при мультиязычности или кастомных переводах часто возникают проблемы с их корректным отображением на нужном языке, особенно если используются автопереводы или кастомные шаблоны.

Основная сложность — правильно подключить перевод этих статусов, чтобы они отображались в административной панели, на фронтенде, в письмах и отчетах без конфликтов и потери данных.

Диагностика проблемы с переводом статусов заказов

  • Статусы заказов показываются только на основном языке и не переводятся при смене языка сайта.
  • Переводы статусов не применяются в письмах клиентам.
  • При использовании автоперевода WooCommerce статусы остаются на исходном языке.
  • Кастомные статусы не отображаются в нужном переводе.

Проверка текущих статусов и их локализации

Для начала проверьте, как WooCommerce выводит статусы через функцию wc_get_order_statuses(). Это массив статусов, где ключ — slug, а значение — название статуса на языке по умолчанию.

$statuses = wc_get_order_statuses();
print_r($statuses);

Выведите этот массив на странице в админке или в шаблоне, чтобы увидеть текущие названия статусов.

Пошаговое решение: правильный перевод статусов заказов WooCommerce

1. Используйте gettext-фильтр для перевода статусов

WooCommerce выводит статусы через gettext, поэтому можно перехватывать переводы через фильтр gettext и возвращать нужные строки на нужном языке.

add_filter('gettext', 'wptranslate_translate_order_statuses', 20, 3);
function wptranslate_translate_order_statuses($translated_text, $text, $domain) {
    if ($domain === 'woocommerce') {
        $translations = [
            'Processing' => 'Обработка',
            'Completed' => 'Завершён',
            'On hold' => 'В ожидании',
            'Cancelled' => 'Отменён',
            'Refunded' => 'Возвращён',
            'Failed' => 'Неудача'
        ];
        if (isset($translations[$text])) {
            return $translations[$text];
        }
    }
    return $translated_text;
}

Замените переводы в массиве на свои варианты. Этот способ надёжен и работает во всех местах, где WooCommerce выводит статусы.

2. Перевод кастомных статусов заказов

Если вы добавляете кастомные статусы, убедитесь, что вы регистрируете их с переводами через функцию register_post_status с параметром label или используйте _x() для локализации.

register_post_status('wc-custom-status', [
    'label' => _x('Custom Status', '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('Custom Status <span class="count">(%s)</span>', 'Custom Statuses <span class="count">(%s)</span>', 'woocommerce'),
]);

Переводы для кастомных статусов добавляйте в .po/.mo файлы вашей темы или плагина.

3. Проверка перевода в email-уведомлениях WooCommerce

Статусы в email берутся из тех же gettext-переводов. Для проверки отправьте тестовое письмо с заказом в нужном статусе и убедитесь, что перевод отображается правильно. При необходимости добавьте фильтр woocommerce_email_order_status для дополнительной кастомизации.

Проверка результата после внедрения

  • Перейдите на фронтенд сайта и смените язык — статусы заказов должны отображаться на выбранном языке.
  • В административной панели WooCommerce статусы заказов должны быть переведены.
  • Отправьте тестовый заказ и проверьте письма — статусы в письмах должны быть на нужном языке.
  • Если есть кастомные статусы — они тоже должны отображаться корректно.

Частые ошибки при переводе статусов заказов WooCommerce

  • Отсутствие фильтра gettext: многие пытаются просто заменить метки в базе, но WooCommerce читает их из gettext.
  • Переводы не обновляются после смены языка: проверьте, что языковые файлы загружены корректно и что фильтры не конфликтуют с плагинами мультиязычности.
  • Кастомные статусы не зарегистрированы с правильными метками: без _x() или корректных переводов кастомные статусы останутся не переведёнными.
  • Автопереводчики не перекрывают gettext: автоперевод по API не всегда заменяет gettext-переводы WooCommerce.

Практические советы по безопасности и производительности

  • Не редактируйте напрямую языковые файлы WooCommerce — используйте gettext фильтр или .po/.mo переводы в дочерних темах или плагинах.
  • Кэшируйте результат фильтра gettext только при необходимости, чтобы не влиять на производительность.
  • При большом количестве языков и кастомных статусов используйте специализированные плагины для мультиязычности, которые умеют работать с WooCommerce статусами (например, WPML, Polylang). Они оптимизируют загрузку переводов.

Сравнение способов перевода статусов заказов WooCommerce

МетодПреимуществаНедостатки
Фильтр gettextГибко, не требует изменения файлов, работает вездеНужно вручную поддерживать переводы, может замедлять загрузку при большом объеме
Переводы .po/.mo файловАвтоматизация, поддержка через PoEdit и Loco TranslateТребует обновления языковых файлов, сложнее для кастомных статусов
Плагины мультиязычности (WPML/Polylang)Интеграция с WooCommerce, удобное управлениеПлатные решения, могут конфликтовать с кастомными кодами
Как исправить проблему с переводом постоянных ссылок (Permalinks) в WordPress
09.12.2025
Как автоматизировать перевод динамического контента WordPress с помощью хуков и AJAX
17.04.2026
Автоматический перевод содержимого WooCommerce с Polylang: практическое руководство
02.07.2026
Автоматический перевод произвольных полей WooCommerce
31.07.2026
Как автоматически передавать язык пользователя в WooCommerce для мультиязычного сайта
10.06.2026