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

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

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

Однако удаление заказов напрямую через URL требует безопасности и проверки, чтобы избежать случайного или злонамеренного удаления.

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

1. Создание пользовательского эндпоинта для удаления заказа

Добавим обработчик на основе init, который будет проверять GET параметры и выполнять удаление при совпадении токена и ID заказа.

add_action('init', function() {
    if (!is_admin() && isset($_GET['delete_order']) && isset($_GET['token'])) {
        $order_id = intval($_GET['delete_order']);
        $token = sanitize_text_field($_GET['token']);
        
        // Проверяем валидность токена
        $secret_key = 'vashe-sekretnoe-slovo'; // замените на свой секрет
        $valid_token = hash('sha256', $order_id . $secret_key);
        
        if ($token !== $valid_token) {
            wp_die('Неверный токен безопасности.');
        }
        
        $order = wc_get_order($order_id);
        if (!$order) {
            wp_die('Заказ не найден.');
        }
        
        // Проверяем статус заказа (например, удаляем только отменённые)
        if ($order->get_status() !== 'cancelled') {
            wp_die('Удалять можно только отменённые заказы.');
        }
        
        // Удаляем заказ
        wp_delete_post($order_id, true); // true — безвозвратное удаление
        
        wp_redirect(home_url('/?order_deleted=1'));
        exit;
    }
});

2. Генерация безопасных ссылок для удаления заказов

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

function get_delete_order_link($order_id) {
    $secret_key = 'vashe-sekretnoe-slovo';
    $token = hash('sha256', $order_id . $secret_key);
    return add_query_arg([
        'delete_order' => $order_id,
        'token' => $token
    ], home_url());
}

Пример использования:

$link = get_delete_order_link(1234);
echo '<a href="' . esc_url($link) . '">Удалить заказ #1234</a>';

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

  • Перейдите по сгенерированной ссылке удаления.
  • Если заказ существует, статус отменён, и токен верный, заказ удалится безвозвратно.
  • Вы будете перенаправлены на главную с параметром ?order_deleted=1.
  • При попытке удалить заказ с неверным токеном или неподходящим статусом появится страница с ошибкой.

Частые ошибки и способы их исправления

  • Заказ не удаляется, хотя ссылка правильная: проверьте статус заказа, он должен быть cancelled (или измените условие в коде).
  • Ошибка «Неверный токен безопасности»: убедитесь, что секретный ключ совпадает в функции генерации и в обработчике.
  • Заказ не найден при удалении: проверьте, что ID заказа корректный и заказ существует в базе.
  • Ссылки доступны публично: добавьте дополнительную защиту, например, проверку текущего пользователя или IP-адреса.

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

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

Сравнение вариантов реализации автоматического удаления заказов

МетодПреимуществаНедостатки
Удаление через ссылку с токеномПростота использования, возможность интеграции с внешними системамиРиск безопасности без надлежащей защиты, требует ручного управления токенами
Удаление через REST API WooCommerceСтандартный метод, поддержка авторизации, гибкостьСложнее в настройке, требует OAuth или API ключей
Удаление через админ-панель вручнуюБезопасность, контрольМедленно при большом количестве заказов
Как создать автоматический отзыв на блоке Gutenberg в WordPress
07.04.2026
WooCommerce: не работают упаковки товаров — как исправить
22.07.2026
WooCommerce: автоматическое изменение стоимости товара при выборе вариаций
21.06.2026
Как создать автоматический отчет о проблемах WordPress
27.01.2026
Как добавить адаптивные изображения в WordPress с помощью srcset
21.12.2025