Почему стоит использовать собственные статусы заказов в WooCommerce
Стандартный набор статусов WooCommerce часто не покрывает все бизнес-сценарии. Например, вам может понадобиться статус «Ожидание подтверждения» или «Требуется проверка платежа». Добавление собственных статусов позволяет точнее управлять процессом обработки заказов и автоматизировать действия в зависимости от конкретного состояния.
Диагностика: как понять, что нужно создавать собственный статус
Если вы замечаете, что в стандартных статусах невозможно отразить ключевые этапы обработки заказов, например:
- Невозможно отделить заказы, ожидающие проверки оплаты, от оплаченных;
- Отсутствуют статусы для предзаказов или кастомных сценариев;
- Требуется интеграция с внешними системами, которые используют свои статусы;
тогда добавление собственных статусов — ваш путь решения.
Пошаговое руководство по добавлению собственного статуса заказа
1. Регистрируем статус с помощью хука init
add_action('init', 'register_custom_order_statuses');
function register_custom_order_statuses() {
register_post_status('wc-awaiting-confirmation', 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')
));
}2. Добавляем статус в список доступных статусов WooCommerce
add_filter('wc_order_statuses', 'add_custom_order_statuses_to_list');
function add_custom_order_statuses_to_list($order_statuses) {
$order_statuses['wc-awaiting-confirmation'] = _x('Ожидание подтверждения', 'Order status', 'woocommerce');
return $order_statuses;
}3. Используем статус в коде и в админке
Теперь новый статус отображается в админке и доступен для установки через интерфейс. Чтобы программно изменить статус заказа, используйте:
$order = wc_get_order($order_id);
$order->update_status('awaiting-confirmation', 'Статус заказа изменен на ожидание подтверждения');Как проверить, что статус работает корректно
- В админке WooCommerce в списке заказов появится новый статус с правильным отображением счетчика.
- В карточке заказа можно выбрать и применить новый статус вручную.
- При программном изменении статуса заказ сохраняет новый статус, и он отображается в списке.
Частые ошибки при добавлении собственных статусов и как их исправить
- Статус не отображается в списке заказов — проверьте, что в
register_post_statusустановлены параметры'show_in_admin_all_list' => trueи'show_in_admin_status_list' => true. - Новый статус не появляется в выпадающем списке при редактировании заказа — убедитесь, что фильтр
wc_order_statusesкорректно возвращает массив с вашим статусом, без ошибок и конфликтов с другими плагинами. - Статус не меняется программно — проверьте правильность идентификатора статуса (без префикса
wc-при вызовеupdate_status).
Практические советы по безопасности и производительности
- Добавляйте коды регистрации и фильтры в собственный плагин или в
functions.phpдочерней темы, чтобы избежать потерь при обновлении. - Проверяйте совместимость с другими плагинами, которые могут переопределять статусы заказов.
- Не создавайте слишком много статусов — это усложняет администрирование и может негативно влиять на производительность запросов.
- Используйте транслит английская для slug статусов — это стандарт WooCommerce и снижает риски конфликтов.
Сравнение способов добавления статусов: плагин vs код
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручной код (как в статье) | Гибкость, полное управление, отсутствие лишних плагинов | Требует навыков, риск ошибок при обновлениях |
| Плагин (например, Custom Order Status Manager) | Простота настройки, интерфейс для управления статусами | Дополнительная нагрузка, зависимость от плагина |