WooCommerce: как установить уникальный код для отложенных заказов

Что такое отложенные заказы в WooCommerce и зачем нужен уникальный код

Отложенные заказы — это заказы, которые пользователь создал, но не завершил оформление (например, не оплатил). Для управления такими заказами полезно назначать уникальный код, который позволит быстро идентифицировать и отслеживать каждый из них без путаницы с другими заказами. Особенно это актуально при ручном управлении или интеграции с CRM/ERP системами.

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

По умолчанию WooCommerce использует последовательные номера для заказов, не разделяя оплаченные и отложенные. Это усложняет:

  • Отслеживание отложенных заказов в админке
  • Автоматическую фильтрацию и обработку через API
  • Связь с внешними системами, если нужен специальный идентификатор

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

Пошаговое решение: добавляем уникальный код для отложенных заказов

1. Создаем уникальный код при создании отложенного заказа

Для отложенных заказов будем использовать статус pending (ожидание оплаты) и при первом сохранении заказа добавим мета-ключ с уникальным кодом.

add_action('woocommerce_checkout_order_processed', 'wpbono_add_unique_code_to_pending_order', 10, 3);
function wpbono_add_unique_code_to_pending_order($order_id, $posted_data, $order) {
    if (!$order) return;
    // Проверяем статус заказа
    if ($order->get_status() === 'pending') {
        // Генерируем уникальный код: префикс + timestamp + случайное число
        $unique_code = 'PENDING-' . time() . '-' . wp_rand(1000, 9999);
        // Сохраняем в мета
        update_post_meta($order_id, '_pending_unique_code', $unique_code);
    }
}

2. Отображаем уникальный код в админке WooCommerce

Чтобы видеть код в списке заказов, добавим колонку в таблицу заказов.

add_filter('manage_edit-shop_order_columns', 'wpbono_add_unique_code_column');
function wpbono_add_unique_code_column($columns) {
    $new_columns = array();
    foreach ($columns as $key => $column) {
        $new_columns[$key] = $column;
        if ($key === 'order_status') {
            $new_columns['pending_unique_code'] = 'Код отложенного';
        }
    }
    return $new_columns;
}

add_action('manage_shop_order_posts_custom_column', 'wpbono_show_unique_code_column');
function wpbono_show_unique_code_column($column) {
    global $post;
    if ($column === 'pending_unique_code') {
        $code = get_post_meta($post->ID, '_pending_unique_code', true);
        if ($code) {
            echo esc_html($code);
        } else {
            echo '-';
        }
    }
}

3. Поиск заказа по уникальному коду

Добавим возможность искать заказ по этому коду прямо из админки:

add_filter('woocommerce_shop_order_search_fields', 'wpbono_add_unique_code_search_field');
function wpbono_add_unique_code_search_field($search_fields) {
    $search_fields[] = '_pending_unique_code';
    return $search_fields;
}

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

  • Создайте новый заказ с оплатой позже (статус pending).
  • Откройте админку WooCommerce > Заказы и убедитесь, что в колонке «Код отложенного» появился уникальный код.
  • Попробуйте в поиске ввести этот код — должен отобразиться нужный заказ.
  • Проверьте, что оплаченные заказы (со статусом processing или completed) не имеют этого кода.

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

  • Код не появляется в заказах: Проверьте, что хук woocommerce_checkout_order_processed срабатывает и что статус заказа — pending. Возможно, заказ сразу получает другой статус — используйте хук woocommerce_new_order или другой подходящий.
  • Поиск по коду не работает: Убедитесь, что добавили мета-ключ в фильтр woocommerce_shop_order_search_fields и что сохранение кода прошло корректно.
  • Конфликты с другими плагинами, управляющими заказами: Проверьте совместимость, возможно, другие плагины перезаписывают статус или метаданные.

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

  • Уникальный код генерируется с помощью time() и wp_rand(), что минимизирует коллизии. Не используйте нестабильные или легко угадываемые коды.
  • Сохраняйте код только для отложенных заказов, чтобы не перегружать базу лишними данными.
  • Если у вас большой магазин, индексируйте мета-ключ _pending_unique_code в базе MySQL для ускорения поиска.
  • Регулярно проверяйте отложенные заказы и удаляйте или архивируйте устаревшие, чтобы не засорять базу.

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

СпособПреимуществаНедостаткиПрименимость
Мета-ключ с уникальным кодомЛегко реализуется, интегрируется с админкой, поиск работаетДополнительное поле в базе, нужно индексировать для скоростиПодходит для большинства магазинов
Использование пользовательского статуса заказаЯвное разделение отложенных заказовСложнее в поддержке, требует доработки плагинов и фильтровПри необходимости сложной логики статусов
Внешний уникальный идентификатор (например, UUID)Максимальная уникальность, подходит для интеграцийСложнее для пользователей, требует дополнительной генерацииДля крупных проектов и интеграций с CRM
Как создать собственный шорткод в WordPress
08.11.2025
Как создать персонализацию контента в WordPress с помощью AJAX и WPBono
16.04.2026
WooCommerce: как сделать отложенные заказы с подтверждением оператора
13.05.2026
Как изменить вывод метаданных в WordPress без изменения темы
24.01.2026
WooCommerce: как исключить определённые товары из отложенных заказов
10.05.2026