Что такое собственные статусы заказов в WooCommerce и зачем они нужны
Стандартные статусы заказов WooCommerce (например, «в обработке», «завершён», «отменён») подходят не для всех бизнес-процессов. Допустим, вам нужно добавить промежуточный статус, например, «ожидает проверки», «ожидает оплаты банковским переводом» или «требуется доставка курьером». Собственные статусы помогают лучше отражать реальное состояние заказа и автоматизировать логику работы с ними.
Диагностика: как понять, что нужны собственные статусы
- Стандартные статусы не покрывают все этапы обработки заказа.
- Требуется дополнительное уведомление клиентов или менеджеров для специфических этапов.
- Автоматизация обработки заказов с разной логикой для новых этапов.
- Неудобство в админке из-за необходимости постоянного ручного контроля.
Пошаговое решение: добавление и использование собственных статусов заказов
1. Регистрация статуса заказов через хук init
function register_custom_order_statuses() {
register_post_status( 'wc-awaiting-verification', 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' )
) );
}
add_action( 'init', 'register_custom_order_statuses' );2. Добавление статуса в список доступных статусов WooCommerce
function add_custom_order_statuses( $order_statuses ) {
$order_statuses['wc-awaiting-verification'] = _x( 'Ожидает проверки', 'Order status', 'woocommerce' );
return $order_statuses;
}
add_filter( 'wc_order_statuses', 'add_custom_order_statuses' );3. Использование нового статуса при создании и обновлении заказов
Можно программно установить статус заказа:
$order = wc_get_order( $order_id );
$order->update_status( 'awaiting-verification', 'Статус изменён на ожидает проверки программно.' );Проверка результата после внедрения
- В админке WooCommerce в списке заказов появился новый статус «Ожидает проверки».
- При смене статуса заказа через интерфейс доступен новый статус.
- При программном обновлении заказа статус корректно устанавливается и отображается.
- Фильтр заказов по новому статусу работает без ошибок.
Частые ошибки и как их исправить
- Статус не отображается в списках заказов — проверьте, что вы добавили статус и в
register_post_status, и в фильтрwc_order_statuses. - Ошибка при смене статуса — убедитесь, что используете правильный ключ статуса с префиксом
wc-вregister_post_status, а при вызовеupdate_status— без префикса. - Статус не виден клиентам — проверьте, что параметр
publicустановлен вtrueи что шаблоны писем WooCommerce поддерживают новый статус (при необходимости добавьте кастомизацию шаблонов).
Практические советы по безопасности и производительности
- Не регистрируйте слишком много собственных статусов — это усложняет администрирование и может замедлить работу интерфейса.
- Используйте переводы в
labelиlabel_countдля поддержки мультиязычности. - При автоматической смене статусов через CRON или хуки убедитесь в проверке прав пользователя и наличии nonce для безопасности.
Чек-лист для добавления собственных статусов заказов в WooCommerce
- Создать функцию регистрации статуса с правильными параметрами и добавить в
init. - Добавить статус в список
wc_order_statusesчерез фильтр. - Проверить работу в админке — отображение и изменение статуса.
- Добавить поддержку нового статуса в шаблоны уведомлений, если нужно.
- Протестировать программную смену статуса заказов.
- Проверить фильтры и отчёты по новым статусам.
Сравнение способов реализации собственных статусов заказов
| Способ | Плюсы | Минусы |
|---|---|---|
Регистрация через register_post_status + wc_order_statuses | Полное интегрирование в WooCommerce, поддержка UI и фильтров, гибкость | Требует написания кода, базовые знания хуков |
| Использование плагинов (например, "WooCommerce Order Status Manager") | Простота настройки, UI для управления статусами, без кода | Платные решения, дополнительный плагин — нагрузка на сайт |
| Использование метаполей вместо статусов | Можно быстро добавить дополнительные признаки | Нет поддержки UI WooCommerce, сложно фильтровать и работать с отчетами |