wpcompany.ru wordpress WPCompany

WooCommerce: установка и настройка собственных статусов заказа

Диагностика проблемы: зачем нужны собственные статусы заказа в WooCommerce

По умолчанию WooCommerce предлагает ограниченный набор статусов для заказов: pending, processing, on-hold, completed, cancelled, refunded и failed. В реальных бизнес-сценариях этого недостаточно. Например, магазины с несколькими этапами обработки заказа или уникальной логистикой нуждаются в кастомных статусах, чтобы лучше отслеживать состояние заказа.

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

Шаги по созданию собственных статусов заказа

1. Регистрируем новый статус заказа

Добавим новый статус, например, awaiting_shipment — «Ожидает отправки».

function register_awaiting_shipment_order_status() {
    register_post_status( 'wc-awaiting-shipment', array(
        'label'                     => _x( 'Ожидает отправки', 'Order status', 'woocommerce' ),
        '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>', 'woocommerce' )
    ) );
}
add_action( 'init', 'register_awaiting_shipment_order_status' );

2. Добавляем статус в список доступных WooCommerce

Чтобы статус отображался в фильтрах и опциях смены статусов, нужно добавить его в массив статусов:

function add_awaiting_shipment_to_order_statuses( $order_statuses ) {
    $new_order_statuses = array();

    // Вставляем новый статус после processing
    foreach ( $order_statuses as $key => $status ) {
        $new_order_statuses[ $key ] = $status;

        if ( 'wc-processing' === $key ) {
            $new_order_statuses['wc-awaiting-shipment'] = 'Ожидает отправки';
        }
    }

    return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'add_awaiting_shipment_to_order_statuses' );

3. Добавляем новый статус в список для смены вручную

Чтобы в админке заказов статус можно было выбрать в выпадающем списке, используем фильтр woocommerce_admin_order_actions:

function add_awaiting_shipment_to_bulk_actions( $bulk_actions ) {
    $bulk_actions['mark_awaiting-shipment'] = 'Отметить как "Ожидает отправки"';
    return $bulk_actions;
}
add_filter( 'bulk_actions-edit-shop_order', 'add_awaiting_shipment_to_bulk_actions' );

4. Отправка уведомлений при смене статуса

Для уведомления клиента или менеджера о смене статуса используйте хук woocommerce_order_status_{new_status}:

function notify_customer_awaiting_shipment( $order_id ) {
    $order = wc_get_order( $order_id );

    if ( ! $order ) {
        return;
    }

    // Отправка стандартного email или кастомного
    WC()->mailer()->customer_completed_order( $order_id );
}
add_action( 'woocommerce_order_status_awaiting-shipment', 'notify_customer_awaiting_shipment' );

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

  • В админке WooCommerce зайдите в список заказов и убедитесь, что в фильтрах появился статус «Ожидает отправки».
  • При просмотре заказа в админке проверьте, что в списке доступных статусов можно выбрать новый.
  • Смените статус заказа на «Ожидает отправки» и проверьте, что заказ отобразился в соответствующем фильтре.
  • Проверьте, что уведомления (если включены) отправляются корректно.

Частые ошибки и как их исправить

  • Статус не отображается в списках: Проверьте, что вы используете правильные ключи — для статусов WooCommerce нужен префикс wc-, например, wc-awaiting-shipment.
  • Уведомления не отправляются: Убедитесь, что хук woocommerce_order_status_awaiting-shipment правильно указан и функция вызывается. Для кастомных уведомлений может понадобиться создать собственный email-класс.
  • Статус не сохраняется при смене: Проверьте, что функция регистрации статуса вызывается на init, а не позднее, и что нет конфликтов с другими плагинами.

Практические советы по безопасности и производительности

  • Не храните в статусах чувствительную информацию — статус должен описывать состояние заказа, без личных данных.
  • Для уведомлений используйте кеширование или отложенную отправку, если у вас большой поток заказов, чтобы не перегружать сервер.
  • Проверяйте совместимость с плагинами для отчетности и интеграций — некоторые из них могут не распознавать кастомные статусы.

Таблица сравнения вариантов внедрения собственных статусов заказа

Метод Плюсы Минусы Пример
Ручная регистрация с хуками Полный контроль, легковесность, без зависимостей Требует знаний PHP, нужно прописывать уведомления, интеграции Код из статьи
Плагины для статусов заказов (например, "Order Status Manager") Простота настройки через UI, поддержка уведомлений Зависимость от плагина, нагрузка, возможные конфликты Плагин в репозитории WooCommerce
Комбинированный подход Использование плагина + кастомизация кода Сложнее поддерживать, возможны конфликты Плагин + доработка функций
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше