wpinc.ru wordpress WP Inc

WooCommerce: как использовать кастомные статусы заказов и их автоматизацию

Зачем нужны кастомные статусы заказов в WooCommerce

WooCommerce по умолчанию предлагает ограниченный набор статусов заказов, таких как «В ожидании оплаты», «Обработка», «Выполнен» и др. Однако для сложных бизнес-процессов часто требуется добавить собственные статусы — например, «Ожидает проверки», «На упаковке», «Отправлен курьером» и т.п. Это позволяет лучше контролировать логистику и информировать клиентов о реальном состоянии заказа.

Диагностика: как понять, что нужны кастомные статусы

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

  • Заказы, которые не подходят ни под один из стандартных статусов.
  • Неудобство в работе с логистикой и уведомлениями.
  • Нехватка прозрачности для клиентов на этапе доставки.

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

Пошаговое создание кастомного статуса заказа

1. Регистрация статуса

Добавьте следующий код в functions.php вашей темы или в кастомный плагин:

function wpinc_register_custom_order_status() {
    register_post_status( 'wc-awaiting-inspection', 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>' )
    ) );
}
add_action( 'init', 'wpinc_register_custom_order_status' );

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

function wpinc_add_custom_order_statuses( $order_statuses ) {
    $new_statuses = array();
    // Добавляем новый статус после 'processing'
    foreach ( $order_statuses as $key => $status ) {
        $new_statuses[ $key ] = $status;
        if ( 'wc-processing' === $key ) {
            $new_statuses['wc-awaiting-inspection'] = 'Ожидает проверки';
        }
    }
    return $new_statuses;
}
add_filter( 'wc_order_statuses', 'wpinc_add_custom_order_statuses' );

3. Автоматизация смены статуса заказа

Например, автоматически переводить заказ в статус «Ожидает проверки» после оплаты:

function wpinc_automate_order_status( $order_id ) {
    if ( ! $order_id ) {
        return;
    }
    $order = wc_get_order( $order_id );
    if ( 'processing' === $order->get_status() ) {
        $order->update_status( 'awaiting-inspection', 'Статус изменён автоматически на «Ожидает проверки»' );
    }
}
add_action( 'woocommerce_thankyou', 'wpinc_automate_order_status' );

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

Чтобы убедиться, что кастомный статус работает корректно:

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

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

  • Статус не отображается в списках: Проверьте, что в register_post_status параметр show_in_admin_status_list установлен в true.
  • Автоматическая смена статуса не срабатывает: Убедитесь, что хук woocommerce_thankyou применяется корректно и передаёт ID заказа.
  • Новый статус не распознаётся WooCommerce: убедитесь, что имя статуса начинается с wc-, например, wc-awaiting-inspection.
  • Проблемы с уведомлениями: для кастомных статусов необходимо дополнительно настраивать шаблоны писем в WooCommerce.

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

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

Сравнение вариантов добавления статусов: плагин vs код

МетодПлюсыМинусы
Плагин (например, Custom Order Status for WooCommerce)Простота настройки, готовый UI, поддержка уведомленийДополнительная нагрузка, зависимость от стороннего кода
Код в functions.php или плагинеГибкость, минимальная нагрузка, полный контрольТребует навыков, нужно самостоятельно настраивать уведомления
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙