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

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

Статусы заказов WooCommerce — «pending», «processing», «completed» и другие — отображаются в административной панели и на сайте. Часто при мультиязычных сайтах эти статусы остаются на английском, даже если остальной контент переведен. Это вызывает путаницу для пользователей и администраторов.

Основные причины:

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

Как перевести стандартные статусы заказов WooCommerce с помощью gettext-перехвата

WooCommerce использует функцию __() и _e() для вывода статусов, но иногда их перевод отсутствует в .po/.mo файлах или плагинах. Можно использовать фильтр gettext для замены строк статусов на нужные переводы на лету.

Пример кода для перевода стандартных статусов:

add_filter('gettext', 'wptranslate_woocommerce_order_statuses_translate', 20, 3);
function wptranslate_woocommerce_order_statuses_translate($translated, $text, $domain) {
    if ($domain === 'woocommerce') {
        switch ($text) {
            case 'Pending payment':
                $translated = 'Ожидает оплаты';
                break;
            case 'Processing':
                $translated = 'В обработке';
                break;
            case 'Completed':
                $translated = 'Завершён';
                break;
            case 'Cancelled':
                $translated = 'Отменён';
                break;
            case 'Refunded':
                $translated = 'Возвращён';
                break;
            case 'Failed':
                $translated = 'Неудача';
                break;
        }
    }
    return $translated;
}

Где добавить этот код

Лучше всего в файл functions.php дочерней темы или в собственный плагин, чтобы при обновлении WooCommerce изменения не сбивались.

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

Если у вас есть кастомные статусы, зарегистрированные через register_post_status(), их нужно отдельно локализовать. Для этого используйте функцию register_post_status() с параметром label, переведённым через __() и загрузите переводы в .po/.mo файлах вашей темы или плагина.

register_post_status('wc-custom-status', array(
    'label'                     => __('Custom 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('Custom Status <span class="count">(%s)</span>', 'Custom Status <span class="count">(%s)</span>', 'your-textdomain'),
));

Обязательно создайте переводы для your-textdomain.

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

1. Создайте новый заказ и измените его статус в административной панели, проверьте, что статусы отображаются на русском.

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

3. Используйте инструмент просмотра исходного кода и убедитесь, что строки переведены именно функцией gettext, а не жёстко в шаблонах.

Частые ошибки и способы исправления

  • Переводы не применяются: Проверьте, что хук gettext добавлен с достаточным приоритетом (рекомендуется 20 или выше), чтобы перехватить строку после WooCommerce.
  • Статусы кастомных заказов не переводятся: Убедитесь, что вы используете локализацию с правильным текстовым доменом и что .mo файл загружен.
  • Перевод затирается при обновлении: Не вносите изменения в файлы плагинов WooCommerce напрямую, используйте дочернюю тему или собственный плагин.
  • Некорректные переводы в e-mail уведомлениях: Проверьте, что переводы доступны в контексте локализации e-mail шаблонов WooCommerce.

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

  • Используйте фильтр gettext аккуратно, чтобы не замедлять загрузку страниц. Ограничьте обработку только нужным текстовым доменом.
  • Для крупных проектов лучше создавать полноценные языковые файлы .po/.mo и подключать их, вместо перехвата в коде.
  • Резервное копирование functions.php перед внесением изменений поможет быстро восстановить сайт в случае ошибок.

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

МетодПлюсыМинусыКогда использовать
Фильтр gettextБыстро, не требует создания файлов переводаМожет влиять на производительность, не масштабируетсяМаленькие сайты, быстрые исправления
Языковые файлы (.po/.mo)Чистое решение, масштабируемое, поддерживается WPТребует знания работы с переводчиками (Poedit и т.п.)Крупные проекты, многократные переводы
Локализация кастомных статусовКорректно работает с кастомным функционаломНужно создавать переводы и правильно регистрировать статусыПлагины и кастомные темы
Автоматический перевод описаний товаров WooCommerce: пошаговое руководство
26.04.2026
Автоматический перевод содержимого WooCommerce с Polylang: практическое руководство
02.07.2026
Как сделать автоперевод контента WordPress на основе open source решений
23.01.2026
Как добавить автоперевод форм в WordPress
16.01.2026
Автоматический перевод сообщений в формах WordPress
15.03.2026