Автоматическое изменение статуса заказа в WooCommerce в зависимости от устройства пользователя

Диагностика задачи: зачем менять статус заказа по устройству

Иногда в WooCommerce возникает потребность автоматически менять статус заказов в зависимости от того, с какого устройства был сделан заказ — мобильного или десктопного. Это полезно, например, для специальных маркетинговых сценариев, при которых мобильные заказы обрабатываются иначе (ускоренная обработка, дополнительные проверки и т.д.).

Задача: по умолчанию WooCommerce ставит статус "обработка" или "ожидание оплаты" для всех заказов. Нужно реализовать автоматическое изменение статуса на другой, если заказ сделан с мобильного устройства.

Как определить устройство клиента в WooCommerce

Определить устройство можно двумя способами:

  • По User-Agent HTTP-заголовка — самый распространенный метод;
  • Через JavaScript и передача данных на сервер (сложнее, требует AJAX).

Для простоты и надежности используем PHP-библиотеку wp_is_mobile(), встроенную в WordPress. Она определяет мобильные устройства по User-Agent.

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

WooCommerce создает заказ при оформлении, инициируя действие woocommerce_thankyou. Можно использовать этот хук для проверки устройства и изменения статуса.

add_action('woocommerce_thankyou', 'change_order_status_based_on_device', 20, 1);
function change_order_status_based_on_device($order_id) {
    if (!$order_id) return;
    
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Если устройство мобильное и статус заказа "processing"
    if (wp_is_mobile() && $order->get_status() === 'processing') {
        // Изменяем статус на "on-hold" (ожидание)
        $order->update_status('on-hold', 'Статус изменён автоматически для мобильного устройства');
    }
}

В этом примере, если заказ сделан с мобильного, и статус по умолчанию "processing", мы меняем его на "on-hold". В реальных условиях можно заменить "on-hold" на любой другой статус, например "wc-custom-status" (если создан кастомный).

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

  • Сделайте тестовый заказ с мобильного устройства (смартфон или эмулятор в браузере с мобильным User-Agent).
  • Зайдите в админку WooCommerce > Заказы и проверьте статус только что созданного заказа.
  • Статус должен автоматически измениться с "processing" на выбранный (например, "on-hold").
  • Если заказ сделан с десктопа, статус не меняется.

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

  • Статус не меняется: проверьте, что хук woocommerce_thankyou действительно вызывается, и функция подключена. Включите логи ошибок PHP.
  • Функция wp_is_mobile() возвращает неверно: она ориентирована на User-Agent, иногда может ошибаться с планшетами. Для более точного определения используйте сторонние библиотеки (но это усложнит код).
  • Конфликт с другими плагинами, меняющими статусы: убедитесь, что приоритет хука (20) не конфликтует. Попробуйте увеличить приоритет.
  • Проблемы с кэшированием: если на сайте есть кэширование страниц или объектное кэширование, оно может мешать корректной работе статусов. Очистите кэш.

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

  • Не используйте тяжелые определения устройства на каждом заказе — wp_is_mobile() достаточно легковесна.
  • Протестируйте на разных браузерах и устройствах, чтобы избежать неправильной логики.
  • Для кастомных статусов создавайте их через register_post_status и добавляйте в WooCommerce, чтобы не возникало ошибок.
  • Логируйте изменения статусов для отладки, например через error_log() или через плагин Clearfy Pro для аудита.

Сравнение вариантов реализации

МетодПлюсыМинусыПример кода
wp_is_mobile()Простое, встроенное в WP, быстроеПогрешности с планшетами, зависит от User-AgentВ статье выше
JavaScript + AJAXБолее точное определение устройства, можно учитывать экран, ориентациюСложнее в реализации, требует JS и AJAXТребует кастомной разработки
Сторонние библиотеки (Mobile Detect)Очень точное определение устройстваДополнительная нагрузка, нужно подключать библиотекуhttps://github.com/serbanghita/Mobile-Detect
Автоматизация создания резервных копий WordPress с помощью плагинов
08.03.2026
Как настроить автоматическое сохранение черновиков в WordPress для защиты контента
24.12.2025
Как реализовать автоматический редирект после входа в WordPress
27.01.2026
Как добавить собственные настройки в админ-панель WordPress
02.12.2025
Как удалить или отключить XML-RPC в WordPress: практическое руководство
12.01.2026