Автоматический перевод статусов заказов WooCommerce через хук woocommerce_order_status_changed

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

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

Проверить проблему просто: в панели заказов или в уведомлениях клиент видит статус на оригинальном языке, без перевода.

Пошаговое решение: автоперевод статусов заказов через хук woocommerce_order_status_changed

1. Подключаемся к хуку для отслеживания смены статуса заказа

Хук woocommerce_order_status_changed срабатывает при изменении статуса заказа. С его помощью можно автоматически запускать функцию перевода.

add_action('woocommerce_order_status_changed', 'auto_translate_order_status', 10, 4);

function auto_translate_order_status($order_id, $old_status, $new_status, $order) {
    // Логика автоперевода здесь
}

2. Определяем языковую версию и словарь переводов

Для автоперевода статусов в конкретный язык создадим словарь. Предположим, что у нас есть поддержка русского и английского, и мы хотим выводить статус в зависимости от текущего языка пользователя или настроек.

$status_translations = [
    'processing' => [
        'ru' => 'Обработка',
        'en' => 'Processing',
    ],
    'completed' => [
        'ru' => 'Завершен',
        'en' => 'Completed',
    ],
    'on-hold' => [
        'ru' => 'В ожидании',
        'en' => 'On hold',
    ],
    // Добавьте другие статусы по необходимости
];

3. Получаем текущий язык и меняем метаданные статуса

Для мультиязычности используйте функцию определения языка, например, если установлен Polylang:

function get_current_language() {
    if (function_exists('pll_current_language')) {
        return pll_current_language();
    }
    return 'en'; // Язык по умолчанию
}

В основной функции обновляем метаданные заказа, чтобы в интерфейсе и уведомлениях показывался переведённый статус.

function auto_translate_order_status($order_id, $old_status, $new_status, $order) {
    global $status_translations;
    $lang = get_current_language();

    if (isset($status_translations[$new_status][$lang])) {
        $translated_status = $status_translations[$new_status][$lang];
        // Сохраняем переведенный статус в метаданные заказа
        $order->update_meta_data('_translated_order_status', $translated_status);
        $order->save();
    }
}

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

  1. Создайте тестовый заказ в WooCommerce.
  2. Измените статус заказа вручную из панели администратора.
  3. Проверьте метаданные заказа через get_post_meta($order_id, '_translated_order_status', true) или с помощью плагина для просмотра метаданных.
  4. Переключите язык сайта (если используется Polylang, WPML или аналог) и убедитесь, что отображается переведённый статус из метаданных.

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

  • Ошибка: Функция pll_current_language() не определена.
    Решение: Проверьте, активен ли плагин Polylang, или замените функцию определения языка на подходящую для вашего мультиязычного решения.
  • Ошибка: Переводы не отображаются в уведомлениях.
    Решение: Убедитесь, что в шаблонах уведомлений WooCommerce вы выводите метаданные _translated_order_status вместо стандартного статуса.
  • Ошибка: Метаданные не сохраняются.
    Решение: Проверьте правильность вызова $order->save(); и наличие прав на запись в базу для пользователя.

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

  • Не используйте автоперевод через внешние API при изменении каждого заказа — это увеличит время обработки и нагрузку.
  • Храните переводы статусов локально в массиве или в файлах переводов (.po/.mo) для быстрого доступа.
  • Ограничьте обработку хука только необходимыми статусами, чтобы избежать лишних операций.
  • В целях безопасности используйте проверку nonce и прав пользователей при изменении заказов в административной панели.

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

МетодПреимуществаНедостаткиРекомендуется для
Локальный словарь + хук woocommerce_order_status_changedБыстро, не зависит от внешних сервисов, полный контрольТребует ручного обновления и поддержки словаряМагазины с фиксированным набором языков и статусов
Использование плагинов мультиязычности с поддержкой WooCommerce (WPML, Polylang)Готовые решения, интеграция с переводом всего сайтаМожет быть избыточно и дорого, нагрузка на сайтСложные мультиязычные проекты с большим объемом контента
Автоперевод через API (Google Translate, DeepL)Автоматизация, поддержка множества языковЗависимость от внешних сервисов, возможные задержки, стоимостьПроекты с динамическим контентом и большим количеством языков
Как автоматизировать перевод сообщений WordPress: плагины и кодовые решения
17.11.2025
Как использовать WPML для перевода производительных тем WordPress
06.12.2025
Автоматический перевод сообщений в формах WordPress
15.03.2026
Как автоматизировать перевод динамического контента WordPress с помощью хуков и AJAX
17.04.2026
Как автоматически переводить сообщения об ошибках в WordPress
22.03.2026