Диагностика проблемы: зачем нужны кастомные статусы заказов в WooCommerce
Стандартные статусы заказов WooCommerce (например, «В обработке», «Завершён», «Отменён») подходят не для всех бизнес-процессов. Например, если в вашем магазине есть этапы логистики, проверки качества или предварительной оплаты, стандартных статусов не хватает для точного контроля. В итоге администраторы и менеджеры теряют прозрачность и оперативность обработки заказов.
Проверьте, сталкиваетесь ли вы с одной из этих ситуаций:
- Невозможно визуально отделить заказы на этапе проверки оплаты от тех, что готовы к отправке.
- Отсутствует статус для возврата или обмена, что затрудняет учёт таких заказов.
- Менеджеры путаются, какой статус соответствует текущему этапу обработки.
Пошаговое решение: добавляем и используем кастомные статусы заказов
1. Регистрация кастомного статуса
Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:
function wpbest_register_custom_order_status() {
register_post_status( 'wc-awaiting-payment', 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', 'wpbest_register_custom_order_status' );2. Добавление статуса в список статусов WooCommerce
Чтобы статус отображался в выпадающем списке на странице редактирования заказа, добавьте:
function wpbest_add_custom_order_statuses( $order_statuses ) {
$order_statuses['wc-awaiting-payment'] = _x( 'Ожидание оплаты', 'Order status', 'woocommerce' );
return $order_statuses;
}
add_filter( 'wc_order_statuses', 'wpbest_add_custom_order_statuses' );3. Использование статуса в логике магазина
Теперь вы можете назначать статус awaiting-payment в админке и использовать его в коде, например, для фильтрации заказов:
$args = array(
'status' => 'wc-awaiting-payment',
'limit' => -1,
);
$orders = wc_get_orders( $args );Проверка результата после внедрения
Чтобы убедиться, что кастомный статус добавлен корректно:
- Перейдите в WooCommerce → Заказы и проверьте наличие нового статуса в фильтрах.
- Откройте любой заказ, попытайтесь изменить статус на «Ожидание оплаты» — статус должен отобразиться и сохраниться.
- Используйте функцию
wc_get_ordersс новым статусом для выборки заказов в коде.
Частые ошибки и как их исправить
- Статус не отображается в админке: проверьте, что хук
initиспользуется правильно, и код добавлен в активную тему или плагин. - Статус не сохраняется при редактировании заказа: убедитесь, что префикс
wc-перед статусом сохранён, иначе WooCommerce не распознает его. - Статус не отображается на страницах магазина: кастомные статусы нужно регистрировать с параметром
'public' => trueи разрешать отображение в списках.
Практические советы по безопасности и производительности
- Добавляйте кастомные статусы только если действительно есть необходимость — избыток статусов усложняет логику и интерфейс.
- Храните кастомные коды статусов в отдельном плагине, чтобы не потерять при смене темы.
- Используйте кеширование запросов
wc_get_ordersпри массовой обработке заказов с кастомными статусами. - Следите за правами пользователей — разрешайте менять статусы только доверенным ролям.
Сравнение способов добавления кастомных статусов
| Метод | Плюсы | Минусы |
|---|---|---|
| Код в functions.php | Простой, быстрое внедрение | Риск потери при смене темы, затруднено масштабирование |
| Отдельный плагин | Устойчивость к смене темы, удобство управления | Требует навыков создания плагинов |
| Плагины из репозитория | Готовые решения без кода | Может быть избыточно, не всегда настраиваемо под задачи |