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

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

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

Как определить неактивный купон?

Неактивный купон — это купон с истекшим сроком действия (date_expires), либо купон, который не использовался и не активен (поле usage_count равно 0), или купон со статусом, запрещающим использование (например, отключённый).

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

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

function wplist_delete_inactive_coupons() {
    // Получаем купоны, у которых дата истечения меньше текущей даты и usage_count = 0
    $args = [
        'posts_per_page' => -1,
        'post_type'      => 'shop_coupon',
        'post_status'    => 'publish',
        'meta_query'     => [
            'relation' => 'AND',
            [
                'key'     => 'date_expires',
                'value'   => current_time('timestamp'),
                'compare' => '<',
                'type'    => 'NUMERIC',
            ],
            [
                'key'     => 'usage_count',
                'value'   => '0',
                'compare' => '=',
                'type'    => 'NUMERIC',
            ],
        ],
    ];

    $expired_coupons = get_posts($args);

    foreach ($expired_coupons as $coupon_post) {
        wp_delete_post($coupon_post->ID, true); // Без возможности восстановления
    }
}

// Регистрируем событие при активации темы/плагина
function wplist_schedule_coupon_cleanup() {
    if (!wp_next_scheduled('wplist_daily_coupon_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wplist_daily_coupon_cleanup');
    }
}
add_action('wp', 'wplist_schedule_coupon_cleanup');

// Хук на выполнение очистки
add_action('wplist_daily_coupon_cleanup', 'wplist_delete_inactive_coupons');

// Очистка при деактивации темы/плагина
function wplist_unschedule_coupon_cleanup() {
    $timestamp = wp_next_scheduled('wplist_daily_coupon_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wplist_daily_coupon_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wplist_unschedule_coupon_cleanup');

Этот код:

  • Ищет купоны с истёкшей датой и нулевым количеством использований.
  • Удаляет их без возможности восстановления.
  • Запускает очистку раз в сутки с помощью WP-Cron.

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

Чтобы проверить, что решение работает:

  1. Создайте купон с истекшей датой и неиспользованным статусом.
  2. Подождите выполнение WP-Cron (или запустите вручную с помощью плагина WP Crontrol).
  3. Проверьте, что купон удалён из админки WooCommerce → Купоны.

Для ручного теста можно вызвать функцию wplist_delete_inactive_coupons() напрямую через functions.php или WP-CLI.

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

  • WP-Cron не срабатывает регулярно: Если на сайте низкий трафик, запланированное событие может не запускаться. Решение — настроить системный cron на сервере для вызова wp-cron.php или запускать вручную через WP Crontrol.
  • Неправильный формат хранения даты истечения: В WooCommerce дата истечения купона хранится в метаполе date_expires в UNIX timestamp. Если купон создан или импортирован нестандартно, условие meta_query может не сработать.
  • Удаляются нужные купоны: Проверьте логику фильтрации. Если купон не должен удаляться (например, активен, но с нулевым usage_count), код нужно доработать.
  • Ошибка с правами доступа: Функция wp_delete_post требует прав администратора. Убедитесь, что код запускается в нужном контексте.

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

  • Для больших магазинов с тысячами купонов ограничьте количество удаляемых купонов за один запуск, чтобы не перегружать сервер.
  • Добавьте логирование удалённых купонов через error_log или отдельный файл для аудита.
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wplist.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udalenie-neaktivnyh-kuponov) для дополнительной оптимизации WooCommerce и удаления мусора.

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

МетодПреимуществаНедостатки
Ручное удаление в админкеПростота, не требует кодаЗатратно по времени, риск пропуска
WP-Cron с кастомным кодом (как в статье)Автоматизация, гибкость настройкиЗависимость от WP-Cron, требует навыков
Плагины для очистки WooCommerceУдобство, расширенный функционалДополнительная нагрузка, возможные конфликты
Автоматическое создание резервных копий WordPress: плагины и кодовые решения
13.12.2025
WooCommerce: автоматическое изменение атрибутов товаров при обновлении заказа
24.05.2026
Как полностью удалить пользователя в WordPress вместе со всеми его данными
06.02.2026
Как удалить удалённых пользователей в WordPress без отказов и ошибок
08.12.2025
Как использовать REST API для управления пользователями в WordPress
07.01.2026