Что такое статусы заказов в WooCommerce и зачем их настраивать
WooCommerce по умолчанию предоставляет несколько статусов заказов (новый, в обработке, выполнен и т.д.). Но для бизнес-процессов часто требуется более точная сегментация и автоматизация действий по изменению статусов. Например, автоматическая отправка уведомлений при переходе в новый статус или запуск внешних интеграций.
Диагностика проблемы: почему стандартных статусов недостаточно
Проверьте в админке WooCommerce в разделе «Заказы», доступны ли нужные вам статусы. Если нет — попытка реализовать автоматизацию на стандартных статусах приведет к потере гибкости и увеличению ручной работы.
Также проверьте, не конфликтуют ли плагины, добавляющие статусы, с вашей текущей версией WooCommerce. Иногда плагины не обновляются, вызывая ошибки.
Как добавить собственный статус заказа в WooCommerce
Для добавления нового статуса используйте следующий код в functions.php вашей темы или в отдельном плагине:
add_action('init', 'register_custom_order_status');
function register_custom_order_status() {
register_post_status('wc-custom-status', array(
'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>')
));
}
add_filter('wc_order_statuses', 'add_custom_order_status_to_list');
function add_custom_order_status_to_list($order_statuses) {
$order_statuses['wc-custom-status'] = 'На проверке';
return $order_statuses;
}Этот код регистрирует новый статус wc-custom-status и добавляет его в список доступных статусов заказов.
Автоматизация перехода заказов в новый статус
Чтобы автоматизировать перевод заказов в ваш новый статус, например, после оплаты, используйте хук woocommerce_order_status_processing или woocommerce_order_status_completed. Пример автоматического перевода заказа в статус «На проверке» после оплаты:
add_action('woocommerce_order_status_processing', 'move_order_to_custom_status');
function move_order_to_custom_status($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
$order->update_status('custom-status', 'Автоматический перевод в статус На проверке');
}Проверка результата: как убедиться, что статусы работают
- Создайте тестовый заказ в WooCommerce и оплатите его.
- Проверьте, что статус заказа изменился на «На проверке» в админке.
- Проверьте логи WooCommerce (WooCommerce > Статус > Логи), чтобы убедиться, что вызов
update_statusпрошел без ошибок. - Если используете уведомления или интеграции, проверьте их реакцию на новый статус.
Частые ошибки и как их исправить
- Статус не отображается в админке: Проверьте, что в
register_post_statusустановлен параметрshow_in_admin_status_listвtrue. - Статус не применяется к заказу: Убедитесь, что используете правильный ключ статуса — без префикса
wc-в методеupdate_status, то естьcustom-status, а неwc-custom-status. - Конфликты с плагинами: Отключите плагины, работающие со статусами, и проверьте, сохраняется ли проблема.
- Хук срабатывает не в том моменте: Используйте правильный хук для нужного этапа заказа. Например,
woocommerce_order_status_processingсрабатывает при переходе в статус «В обработке».
Практические советы по безопасности и производительности
- Не используйте слишком много кастомных статусов, чтобы не усложнять логику и интерфейс.
- Автоматические изменения статусов делайте только после проверки условий, чтобы избежать циклов обновления.
- Обрабатывайте ошибки при вызове
update_status, например, через try-catch или проверку возвращаемого результата. - Для логирования автоматических переходов старайтесь использовать отдельный лог-файл или сервис, чтобы не засорять системные логи.
Сравнение способов добавления и управления статусами заказов WooCommerce
| Метод | Преимущества | Недостатки |
|---|---|---|
| Добавление статусов через код (register_post_status) | Полный контроль, нет зависимости от плагинов, гибкость | Требует знаний PHP, может быть сложно для новичков |
| Использование плагинов (например, "WooCommerce Order Status Manager") | Удобный интерфейс, быстрый старт, множество функций | Дополнительный плагин — нагрузка, возможные конфликты, платные версии |
| Комбинированный подход (код + плагины) | Баланс гибкости и удобства | Сложнее отладка, возможны дублирования |