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