Зачем нужны кастомные статусы заказов в WooCommerce
WooCommerce по умолчанию предлагает ограниченный набор статусов заказов, таких как «В ожидании оплаты», «Обработка», «Выполнен» и др. Однако для сложных бизнес-процессов часто требуется добавить собственные статусы — например, «Ожидает проверки», «На упаковке», «Отправлен курьером» и т.п. Это позволяет лучше контролировать логистику и информировать клиентов о реальном состоянии заказа.
Диагностика: как понять, что нужны кастомные статусы
Если вы сталкиваетесь с такими проблемами, стоит внедрить кастомные статусы:
- Заказы, которые не подходят ни под один из стандартных статусов.
- Неудобство в работе с логистикой и уведомлениями.
- Нехватка прозрачности для клиентов на этапе доставки.
Например, если после оплаты заказ должен пройти самостоятельную проверку качества, и вы хотите обозначить этот этап отдельно — стандартных статусов недостаточно.
Пошаговое создание кастомного статуса заказа
1. Регистрация статуса
Добавьте следующий код в functions.php вашей темы или в кастомный плагин:
function wpinc_register_custom_order_status() {
register_post_status( 'wc-awaiting-inspection', 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_action( 'init', 'wpinc_register_custom_order_status' );2. Добавление статуса в список доступных для заказов
function wpinc_add_custom_order_statuses( $order_statuses ) {
$new_statuses = array();
// Добавляем новый статус после 'processing'
foreach ( $order_statuses as $key => $status ) {
$new_statuses[ $key ] = $status;
if ( 'wc-processing' === $key ) {
$new_statuses['wc-awaiting-inspection'] = 'Ожидает проверки';
}
}
return $new_statuses;
}
add_filter( 'wc_order_statuses', 'wpinc_add_custom_order_statuses' );3. Автоматизация смены статуса заказа
Например, автоматически переводить заказ в статус «Ожидает проверки» после оплаты:
function wpinc_automate_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
if ( 'processing' === $order->get_status() ) {
$order->update_status( 'awaiting-inspection', 'Статус изменён автоматически на «Ожидает проверки»' );
}
}
add_action( 'woocommerce_thankyou', 'wpinc_automate_order_status' );Проверка результата после внедрения
Чтобы убедиться, что кастомный статус работает корректно:
- Создайте тестовый заказ, оплатите его.
- Проверьте в админке WooCommerce, что заказ получил статус «Ожидает проверки».
- Убедитесь, что статус отображается в списке заказов и в выпадающих списках для смены статусов.
- Проверьте, что уведомления для клиентов (если настроены) корректно отправляются.
Частые ошибки и как их исправить
- Статус не отображается в списках: Проверьте, что в
register_post_statusпараметрshow_in_admin_status_listустановлен вtrue. - Автоматическая смена статуса не срабатывает: Убедитесь, что хук
woocommerce_thankyouприменяется корректно и передаёт ID заказа. - Новый статус не распознаётся WooCommerce: убедитесь, что имя статуса начинается с
wc-, например,wc-awaiting-inspection. - Проблемы с уведомлениями: для кастомных статусов необходимо дополнительно настраивать шаблоны писем в WooCommerce.
Практические советы по безопасности и производительности
- Добавляйте кастомные статусы через плагин, а не напрямую в тему — это позволит сохранить изменения при обновлении темы.
- Минимизируйте количество автоматических переходов статусов, чтобы не создавать излишнюю нагрузку на систему и почтовые сервисы.
- Используйте транзиенты или отдельные задачи WP-Cron, если автоматизация должна запускаться с задержкой или по расписанию.
- Проверяйте права доступа пользователей, которые смогут менять статусы вручную, чтобы избежать ошибок и злоупотреблений.
Сравнение вариантов добавления статусов: плагин vs код
| Метод | Плюсы | Минусы |
|---|---|---|
| Плагин (например, Custom Order Status for WooCommerce) | Простота настройки, готовый UI, поддержка уведомлений | Дополнительная нагрузка, зависимость от стороннего кода |
| Код в functions.php или плагине | Гибкость, минимальная нагрузка, полный контроль | Требует навыков, нужно самостоятельно настраивать уведомления |