Добавление пользовательских статусов заказов в WooCommerce: подробное руководство с примерами кода

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 — мощный инструмент для управления процессом продаж. Главное — тщательно продумать логику переходов между статусами, уведомления и взаимодействие с другими системами.

Используйте приведенные примеры как основу, адаптируя их под конкретные задачи вашего бизнеса. Тестируйте изменения в тестовой среде, чтобы избежать ошибок в работе магазина.

Как создать собственный REST API для WooCommerce в WordPress
21.11.2025
Интеграция WordPress с системой управления заказами 1С
27.12.2025
WooCommerce: автоматическое изменение статусов заказов при проблемах с платежами
10.05.2026
Добавление промежуточного статуса заказа в WooCommerce: пошаговое руководство
16.03.2026
Кастомизация email уведомлений о статусах заказов в WooCommerce
10.01.2026