WooCommerce по умолчанию предлагает ограниченный набор статусов заказов: 'Ожидает оплаты', 'Обрабатывается', 'Выполнен', 'Отменён' и несколько других. Однако иногда для бизнеса требуется более гибкое управление статусами заказов, чтобы точнее отражать этапы обработки, например, 'Ожидает подтверждения', 'Готов к отправке', 'Возврат в обработке' и т.д.
Зачем нужны пользовательские статусы заказов в WooCommerce
Стандартных статусов часто недостаточно для сложных бизнес-процессов. Добавление своих статусов позволяет:
- Чётко разграничить этапы обработки заказа.
- Автоматизировать уведомления клиентов и сотрудников по новым статусам.
- Интегрироваться с внешними системами, передавая более точную информацию.
- Улучшить внутренний контроль и отчетность.
Рассмотрим, как добавить пользовательские статусы заказов с помощью кода и обеспечить их корректное отображение и работу в админке и на сайте.
Регистрация пользовательских статусов заказов
Для регистрации новых статусов можно использовать хук init и функцию register_post_status(). Важно указать параметры, чтобы статус корректно отображался и работал с WooCommerce.
add_action('init', 'wporders_register_custom_order_statuses');
function wporders_register_custom_order_statuses() {
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>')
));
register_post_status('wc-ready-to-ship', 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>')
));
}
Обратите внимание, что префикс wc- обязателен для новых статусов WooCommerce, чтобы платформа могла их корректно обрабатывать.
Добавление статусов в список статусов WooCommerce
Зарегистрированные статусы необходимо добавить в список статусов WooCommerce, чтобы они появились в интерфейсе редактирования заказа и фильтрах. Для этого используем фильтр wc_order_statuses:
add_filter('wc_order_statuses', 'wporders_add_custom_order_statuses');
function wporders_add_custom_order_statuses($order_statuses) {
$new_statuses = array(
'wc-awaiting-confirmation' => 'Ожидает подтверждения',
'wc-ready-to-ship' => 'Готов к отправке',
);
return array_merge($order_statuses, $new_statuses);
}
После этого новые статусы будут доступны для выбора при изменении статуса заказа в админке WooCommerce.
Добавление пользовательских статусов в уведомления WooCommerce
Чтобы отправлять уведомления клиентам и администраторам при смене новых статусов, нужно добавить обработчики для хуков смены статуса. Например, добавим уведомление при переходе в статус 'Ожидает подтверждения':
add_action('woocommerce_order_status_pending_to_awaiting-confirmation_notification', 'wporders_notify_on_awaiting_confirmation');
function wporders_notify_on_awaiting_confirmation($order) {
// Получаем email клиента
$to = $order->get_billing_email();
$subject = 'Ваш заказ ожидает подтверждения';
$message = 'Здравствуйте! Ваш заказ №' . $order->get_order_number() . ' сейчас ожидает подтверждения. Скоро с вами свяжутся.';
wp_mail($to, $subject, $message);
}
Это простой пример, в реальном проекте лучше использовать класс WC_Email для создания и кастомизации шаблонов писем. Но и этот способ работает.
Отображение пользовательских статусов в заказах и отчетах
Пользовательские статусы автоматически появятся в списке заказов в админке и будут учитываться в отчетах WooCommerce. Если нужно добавить дополнительную логику для фильтрации или сортировки — можно использовать соответствующие хуки, например, pre_get_posts, и проверять статус заказа.
Пример вывода заказов с новым статусом на фронтенде
Чтобы вывести на странице пользователя список заказов с конкретным пользовательским статусом, можно использовать WP_Query с параметром post_status:
$args = array(
'post_type' => 'shop_order',
'post_status' => 'wc-awaiting-confirmation',
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
);
$orders = get_posts($args);
foreach ($orders as $order_post) {
$order = wc_get_order($order_post->ID);
echo 'Заказ №' . $order->get_order_number() . ' со статусом: ' . wc_get_order_status_name($order->get_status()) . '<br>';
}
Советы по интеграции пользовательских статусов с плагинами
Если вы используете плагины для автоматизации заказов или CRM, например, Clearfy Pro или WPRemark, убедитесь, что они корректно работают с новыми статусами. Иногда требуется добавить дополнительные фильтры или настройки, чтобы плагины учитывали пользовательские статусы в своих процессах.
Выводы и рекомендации по работе с пользовательскими статусами заказов
Добавление пользовательских статусов заказов в WooCommerce — мощный инструмент для управления процессом продаж. Главное — тщательно продумать логику переходов между статусами, уведомления и взаимодействие с другими системами.
Используйте приведенные примеры как основу, адаптируя их под конкретные задачи вашего бизнеса. Тестируйте изменения в тестовой среде, чтобы избежать ошибок в работе магазина.