Диагностика задачи: зачем нужны собственные статусы заказа в WooCommerce
WooCommerce по умолчанию содержит ограниченный набор статусов заказов (например, pending, processing, completed). Иногда бизнес-процессы требуют более детальной классификации заказов, например, статус "Ожидание оплаты по счету" или "Требуется подтверждение". Без кастомных статусов сложно автоматизировать обработку и отчеты.
Как добавить собственный статус заказа в WooCommerce
Для добавления нового статуса нужно зарегистрировать его с помощью хука init и добавить в список статусов для отображения в админке.
Шаг 1. Регистрируем новый статус заказа
add_action('init', function() {
register_post_status('wc-awaiting-payment', array(
'label' => 'Ожидание оплаты по счету',
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop('Ожидание оплаты (%s)', 'Ожидание оплаты (%s)')
));
});Шаг 2. Включаем новый статус в список статусов WooCommerce
add_filter('wc_order_statuses', function($order_statuses) {
$order_statuses['wc-awaiting-payment'] = 'Ожидание оплаты по счету';
return $order_statuses;
});Шаг 3. Добавляем статус для массовых действий в админке
add_action('admin_footer', function() {
if ('edit.php' != get_current_screen()->base || 'shop_order' != get_post_type()) {
return;
}
?>
<script>
jQuery(function($){
$('select[name="action"]').append('<option value="mark_awaiting-payment">Отметить как "Ожидание оплаты"</option>');
$('select[name="action2"]').append('<option value="mark_awaiting-payment">Отметить как "Ожидание оплаты"</option>');
});
</script>
<?php
});Проверка результата после внедрения
- В разделе Заказы → Все заказы появится новый статус "Ожидание оплаты по счету" в фильтрах и списке заказов.
- При редактировании заказа в поле статусов можно выбрать новый статус.
- В массовых действиях на странице заказов теперь доступен пункт для смены статуса на "Ожидание оплаты по счету".
Для проверки можно создать тестовый заказ и изменить у него статус на новый, затем обновить страницу списка заказов — статус должен отобразиться корректно.
Частые ошибки и как их исправить
- Статус не отображается в админке. Возможно, забыли добавить статус в
wc_order_statusesфильтр или не указали параметрshow_in_admin_all_listкакtrueпри регистрации. - Массовые действия не работают. Проверьте, что скрипт для добавления опций в селект загружается только на странице заказов и что значения опций начинаются с
mark_. - Статус не отображается в отчетах. WooCommerce некоторые отчеты жестко привязывает к дефолтным статусам. Для сложных отчетов потребуется кастомизация или расширяющие плагины.
Практические советы по безопасности и производительности
- Регистрируйте статусы только один раз, например, в
initс проверкой контекста, чтобы избежать дублирования и ошибок. - Минимизируйте использование inline-скриптов — лучше добавляйте JS через
wp_enqueue_script, особенно если статусов много. - Для часто используемых пользовательских статусов можно добавить автоматические уведомления по email с помощью хука
woocommerce_order_status_{new_status}.
Резюме и чек-лист для внедрения собственного статуса заказа в WooCommerce
- Добавить регистрацию статуса через
register_post_status. - Добавить статус в список через фильтр
wc_order_statuses. - Добавить опцию для массовых действий в админке.
- Проверить отображение в списке заказов и фильтрах.
- Проверить возможность смены статуса на странице заказа.
- Отладить возможные ошибки отображения.