Как добавить и настроить пользовательские статусы заказов в WooCommerce

WooCommerce по умолчанию предлагает ограниченный набор статусов заказов, таких как "В обработке", "Завершён", "Отменён" и другие. В реальных проектах часто возникает необходимость расширить этот список, добавив свои статусы, чтобы точнее отражать этапы обработки заказа. В этой статье разберём, как добавить и настроить пользовательские статусы заказов в WooCommerce с помощью кода, а также рассмотрим плагины для удобного управления.

Почему нужны пользовательские статусы заказов в WooCommerce

Стандартные статусы WooCommerce подходят для большинства магазинов, но есть ситуации, когда требуется более детальная классификация:

  • Складские процессы: "Ожидает пополнения", "Отгружено на доставку".
  • Производственные этапы: "В производстве", "Тестируется".
  • Особые условия: "Ожидает подтверждения оплаты", "Требуется звонок".

Добавление собственных статусов помогает автоматизировать бизнес-процессы и информировать клиентов более точно.

Как добавить пользовательские статусы заказов в WooCommerce через код

Для добавления статусов нужно использовать хуки WordPress и WooCommerce. Рассмотрим пример добавления статуса "Ожидает подтверждения":

add_filter('wc_order_statuses', 'wplab_add_custom_order_statuses');
function wplab_add_custom_order_statuses($order_statuses) {
    $order_statuses['wc-awaiting-confirmation'] = _x('Ожидает подтверждения', 'Order status', 'woocommerce');
    return $order_statuses;
}

add_action('init', 'wplab_register_custom_order_status');
function wplab_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>')
    ));
}

Этот код добавляет новый статус с ключом wc-awaiting-confirmation. Обратите внимание, что префикс wc- обязателен для корректной работы с WooCommerce.

Отображение пользовательского статуса в админке и на сайте

Чтобы статус отображался в фильтрах заказов в админке, достаточно зарегистрировать его с параметрами show_in_admin_all_list и show_in_admin_status_list. Для вывода статуса на страницах оформления заказа и в уведомлениях WooCommerce автоматически использует wc_order_statuses.

Как назначать пользовательский статус программно

Для изменения статуса заказа через код используйте метод update_status объекта заказа:

$order = wc_get_order($order_id);
$order->update_status('awaiting-confirmation', 'Статус изменён на Ожидает подтверждения');

Этот метод автоматически триггерит все стандартные действия WooCommerce, связанные с изменением статуса.

Плагины для управления пользовательскими статусами заказов

Если вы предпочитаете не писать код, существуют удобные плагины:

  • WooCommerce Order Status Manager — позволяет создавать, редактировать и удалять статусы через интерфейс.
  • Clearfy Pro — комплексный плагин для оптимизации и настройки WooCommerce, включая работу со статусами.

Использование этих плагинов значительно упрощает работу с кастомными статусами без необходимости программирования.

Использование пользовательских статусов в уведомлениях WooCommerce

Чтобы отправлять письма клиентам при переходе заказа в новый пользовательский статус, нужно добавить поддержку уведомлений. Для этого зарегистрируем новую почтовую рассылку:

add_filter('woocommerce_email_classes', 'wplab_add_custom_order_status_email');
function wplab_add_custom_order_status_email($emails) {
    require_once 'class-wc-email-awaiting-confirmation.php';
    $emails['WC_Email_Awaiting_Confirmation'] = new WC_Email_Awaiting_Confirmation();
    return $emails;
}

Далее создайте файл class-wc-email-awaiting-confirmation.php на основе стандартных email классов WooCommerce, переопределив необходимые методы. Это позволит отправлять уведомления при переходе заказа в статус "Ожидает подтверждения".

Пример простого класса уведомления

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

class WC_Email_Awaiting_Confirmation extends WC_Email {
    public function __construct() {
        $this->id = 'awaiting_confirmation';
        $this->title = 'Ожидает подтверждения';
        $this->description = 'Письмо отправляется, когда заказ получает статус "Ожидает подтверждения"';

        $this->template_html  = 'emails/customer-awaiting-confirmation.php';
        $this->template_plain = 'emails/plain/customer-awaiting-confirmation.php';

        add_action('woocommerce_order_status_awaiting-confirmation_notification', array($this, 'trigger'), 10, 2);

        parent::__construct();
    }

    public function trigger($order_id, $order = false) {
        if ($order_id && ! $order) {
            $order = wc_get_order($order_id);
        }

        if (! $order) {
            return;
        }

        $this->object = $order;
        $this->recipient = $this->object->get_billing_email();

        if (! $this->is_enabled() || ! $this->get_recipient()) {
            return;
        }

        $this->send($this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments());
    }

    public function get_content_html() {
        ob_start();
        wc_get_template($this->template_html, array('order' => $this->object));
        return ob_get_clean();
    }

    public function get_content_plain() {
        ob_start();
        wc_get_template($this->template_plain, array('order' => $this->object));
        return ob_get_clean();
    }
}

Вывод пользовательского статуса в интерфейсе

Чтобы добавить новый статус в список статусов заказа на фронтенде (например, в личном кабинете клиента), добавьте такой фильтр:

add_filter('woocommerce_my_account_my_orders_query', 'wplab_my_account_orders_custom_status', 10, 2);
function wplab_my_account_orders_custom_status($args, $customer_id) {
    $args['post_status'][] = 'wc-awaiting-confirmation';
    return $args;
}

Это позволит клиентам видеть заказы с новыми статусами.

Итоги

Добавление пользовательских статусов заказов в WooCommerce — мощный инструмент для тонкой настройки бизнес-процессов интернет-магазина. Вы можете реализовать это как программно, так и через плагины. Важно не забывать о корректном добавлении уведомлений и отображении статусов в административной и клиентской части сайта.

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

Создание и использование пользовательских атрибутов data в WordPress
29.01.2026
Оптимизация скорости WordPress: прокси и кэширование для быстрого сайта
20.05.2025
Как удалить пустые категории WordPress: практическое руководство
18.02.2026
Как создать собственный плагин WordPress: пошаговое руководство
31.10.2025
Как избежать потери данных при обновлении WooCommerce
24.05.2026