WooCommerce: как автоматически удалять неактуальные купоны

Диагностика проблемы с неактуальными купонами в WooCommerce

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

Частые признаки проблемы:

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

Пошаговое решение: автоматическое удаление неактуальных купонов

1. Создание пользовательской функции для удаления купонов с истёкшим сроком действия

WooCommerce хранит купоны как записи типа shop_coupon. Для удаления можно использовать WP_Query с мета-запросом по дате окончания купона.

function wpid_delete_expired_coupons() {
    $today = date('Y-m-d');
    $args = [
        'post_type' => 'shop_coupon',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => 'expiry_date',
                'value' => $today,
                'compare' => '<',
                'type' => 'DATE',
            ],
        ],
        'fields' => 'ids',
    ];
    $expired_coupons = get_posts($args);
    if (!empty($expired_coupons)) {
        foreach ($expired_coupons as $coupon_id) {
            wp_delete_post($coupon_id, true); // true для безвозвратного удаления
        }
    }
}

2. Настройка запуска функции по расписанию (WP-Cron)

Чтобы удалять купоны автоматически, добавим задачу в WP-Cron, например, раз в сутки.

if (!wp_next_scheduled('wpid_daily_delete_expired_coupons')) {
    wp_schedule_event(time(), 'daily', 'wpid_daily_delete_expired_coupons');
}

add_action('wpid_daily_delete_expired_coupons', 'wpid_delete_expired_coupons');

3. Добавление функции и Cron в файл functions.php темы или в кастомный плагин

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

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

  • Зайдите в раздел «Купоны» в админке WooCommerce и проверьте наличие купонов с датой окончания раньше сегодняшнего дня.
  • Запустите функцию вручную, добавив wpid_delete_expired_coupons(); в functions.php и обновите сайт, затем удалите вызов, чтобы убедиться в удалении.
  • Через сутки убедитесь, что WP-Cron сработал — можно использовать плагин WP Crontrol для мониторинга задач.

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

  • Ошибка: Купоны не удаляются, хотя срок истёк.
    Причина: Купоны не имеют мета-ключа expiry_date или формат даты отличается.
    Решение: Проверьте, что дата окончания купона хранится именно в expiry_date и в формате Y-m-d. Можно дополнительно вывести все ключи метаданных купона через get_post_meta($coupon_id).
  • Ошибка: WP-Cron не запускается.
    Причина: На сервере отключён WP-Cron или долгие интервалы.
    Решение: Настройте системный CRON для запуска wp-cron.php или используйте плагин WP Crontrol для диагностики.
  • Ошибка: Удаляются нужные купоны с будущей датой.
    Причина: Ошибка в сравнении дат или неправильный часовой пояс.
    Решение: Проверьте функцию date_default_timezone_set() и используйте WP-функцию current_time('Y-m-d') для точности.

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

  • Перед удалением купонов лучше делать резервную копию базы данных, особенно если магазин большой и купоны важны.
  • Удаление большого количества записей за один запуск может нагрузить сервер — если купонов много, реализуйте пакетную обработку с лимитом по 50 штук за раз.
  • Используйте wp_delete_post($id, true) для полного удаления, иначе купоны попадут в корзину и будут занимать место.
  • Регулярно проверяйте наличие задач WP-Cron и корректность их выполнения, чтобы автоматизация не сбоила.

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

МетодПлюсыМинусы
Ручное удаление в админкеПросто, не требует кодаНеэффективно при большом количестве купонов
Плагин для управления купонамиУдобный интерфейс, настройкиМожет нагружать сайт, зависит от сторонних решений
Кастомный код с WP-CronАвтоматизация, лёгкая настройка, без сторонних плагиновТребует технических знаний, нужно следить за WP-Cron
Как удалить пустые HTML-теги в WordPress
24.03.2026
WooCommerce: как автоматически удалять заказы по статусу после оплаты
31.05.2026
Как добавить автоматический перевод постов в WordPress
04.03.2026
WooCommerce: как автоматически отключить товар после продажи
26.05.2026
Как автоматически обновлять миниатюры в WordPress при смене размера изображений
14.03.2026