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

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

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

Основные признаки проблемы:

  • Просроченные купоны видны в списке купонов в админке.
  • Купоны с истекшим сроком отображаются на фронтенде, но не работают.
  • Высокое количество неактивных купонов влияет на производительность.

Как проверить наличие просроченных купонов

Для диагностики выполните SQL-запрос через phpMyAdmin или WP CLI для определения числа просроченных купонов:

SELECT ID, post_title, meta_value as expiry_date FROM wp_posts
JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
WHERE post_type = 'shop_coupon'
AND meta_key = 'expiry_date'
AND STR_TO_DATE(meta_value, '%Y-%m-%d') < CURDATE();

Если запрос возвращает записи — у вас есть просроченные купоны.

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

Для автоматизации удаления просроченных купонов можно создать небольшой плагин или добавить код в functions.php темы. Алгоритм:

  1. Создать функцию, которая ищет и удаляет купоны с датой истечения меньше текущей.
  2. Запланировать регулярный запуск функции через WP Cron.

Пример кода удаления просроченных купонов

function wc_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);

    foreach ($expired_coupons as $coupon_id) {
        wp_delete_post($coupon_id, true); // полное удаление
    }
}

// Планируем событие раз в сутки
if (!wp_next_scheduled('wc_daily_delete_expired_coupons')) {
    wp_schedule_event(time(), 'daily', 'wc_daily_delete_expired_coupons');
}

add_action('wc_daily_delete_expired_coupons', 'wc_delete_expired_coupons');

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

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

  • Создайте тестовый купон с датой истечения, например, вчера.
  • Запустите вручную функцию: do_action('wc_daily_delete_expired_coupons'); через WP CLI или добавьте вызов в код.
  • Проверьте, что купон удалился из базы и больше не отображается в списке купонов.
  • Проверьте Cron задачи через плагин WP Crontrol, убедитесь, что событие запланировано.

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

  • Функция не запускается регулярно: Проверьте, активирован ли WP Cron и нет ли конфликтов с плагинами, блокирующими Cron.
  • Дата купона хранится в нестандартном формате: WooCommerce по умолчанию использует формат 'Y-m-d', убедитесь, что это так, иначе исправьте формат в meta_query.
  • Купоны не удаляются, а только деактивируются: wp_delete_post с параметром true удаляет полностью, если хотите деактивировать — используйте update_post_meta для изменения статуса.
  • Потеря данных при удалении: Убедитесь, что удалять купоны можно без потерь данных, например, при интеграциях с другими системами.

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

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

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, не требует кодаТрудозатратно, риск пропуска
SQL-запрос для удаленияБыстрое массовое удалениеРиск ошибок, требует навыков SQL
Автоматизация через WP Cron (код)Полная автоматизация, минимальный контрольТребует программирования, возможны проблемы с Cron
Как отключить автосохранение в WordPress: практическое руководство
18.02.2026
Автоматическая отправка отчетов по email в WordPress: практическое руководство
22.01.2026
WooCommerce: решение проблемы неработающей функции изменения стоимости товара
17.06.2026
Как использовать REST API WordPress для создания плагинов
04.12.2025
Защита WordPress от атак Brute Force: эффективные методы и практические решения
29.11.2025