Почему нужен кастомный статус заказа в WooCommerce
Стандартные статусы WooCommerce (ожидает оплаты, в обработке, выполнен и т.д.) не всегда подходят для всех бизнес-процессов. Например, для магазинов с длительной обработкой заказов, предзаказами или дополнительной верификацией клиента часто требуется добавить собственные статусы. Это поможет точно отражать этапы обработки и улучшит коммуникацию с покупателями.
Диагностика: Как понять, что стандартных статусов недостаточно
- Вам сложно отследить на каком этапе находится заказ из-за недостатка статусов.
- Необходима автоматизация действий при переходе заказа в определенный статус.
- Вы хотите информировать клиентов о промежуточных этапах (например, "Ожидание подтверждения", "Готовится к отправке").
Пошаговое решение: добавляем новый статус заказа и интегрируем его в WooCommerce
1. Регистрируем новый статус заказа
Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
function wpfactory_register_custom_order_status() {
register_post_status( 'wc-awaiting-confirmation', 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', 'wpfactory_register_custom_order_status' );2. Добавляем новый статус в список статусов WooCommerce
Чтобы статус появился в интерфейсе выбора и фильтров, добавьте:
function wpfactory_add_custom_order_statuses( $order_statuses ) {
$new_statuses = array();
// Вставляем новый статус после «wc-processing»
foreach ( $order_statuses as $key => $status ) {
$new_statuses[ $key ] = $status;
if ( 'wc-processing' === $key ) {
$new_statuses['wc-awaiting-confirmation'] = 'Ожидание подтверждения';
}
}
return $new_statuses;
}
add_filter( 'wc_order_statuses', 'wpfactory_add_custom_order_statuses' );3. Автоматизируем смену статуса (опционально): пример перехода из «в обработке» в новый статус через 2 дня
function wpfactory_automatic_status_change() {
$orders = wc_get_orders( array(
'status' => 'processing',
'limit' => -1,
'date_created' => '<' . ( time() - 2 * DAY_IN_SECONDS ),
) );
foreach ( $orders as $order ) {
$order->update_status( 'awaiting-confirmation', 'Автоматический переход в статус ожидания подтверждения после 2 дней.', true );
}
}
add_action( 'wp_loaded', 'wpfactory_automatic_status_change' );Проверка результата
- В админке WooCommerce в списке заказов должен появиться новый статус «Ожидание подтверждения».
- При редактировании заказа новый статус должен быть доступен для выбора.
- Если настроен автоматический переход, заказы старше 2 дней со статусом «В обработке» должны менять статус на новый.
Частые ошибки при добавлении кастомных статусов заказов
- Статус не отображается в списках: забыли добавить статус в фильтр
wc_order_statuses. - Статус не сохраняется при смене вручную: не зарегистрировали статус через
register_post_statusс ключомwc-и параметрамиpublicиshow_in_admin_all_list. - Конфликты с плагинами: некоторые плагины могут не поддерживать кастомные статусы, требуется проверять совместимость.
- Автоматическое изменение статуса не работает: ошибка в условии выборки заказов, неверный хук или отсутствие вызова CRON для периодической проверки.
Практические советы по безопасности и производительности
- Не используйте добавление статусов напрямую в core WooCommerce — только через хуки и фильтры.
- Для массовых операций с заказами используйте WP-CRON или системные CRON-задачи, чтобы не нагружать сайт.
- Проверяйте, чтобы ключи статусов начинались с
wc-, иначе WooCommerce не распознает их. - Добавьте локализацию текстов с помощью функций
__()или_e()для поддержки мультиязычности.
Сравнение способов добавления кастомных статусов в WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное добавление через код (хуки и фильтры) | Полный контроль, нет зависимостей, легковесно | Требует навыков программирования, возможны ошибки при неправильной реализации |
| Плагины (например, "WooCommerce Order Status Manager") | Удобный интерфейс, дополнительные функции (уведомления, автоматизация) | Дополнительная нагрузка на сайт, возможны конфликты, платные функции |