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

Проблема: накопление неактивных купонов в WooCommerce

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

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

Чтобы понять, сколько купонов неактивны, можно выполнить SQL-запрос напрямую к базе данных:

SELECT ID, post_title, post_status FROM wp_posts WHERE post_type = 'shop_coupon' AND post_status != 'publish';

Здесь post_status != 'publish' означает, что купон неактивен. Также неактивные купоны могут иметь статус draft, trash или другие.

Для проверки истекших купонов, можно посмотреть мета-данные expiry_date в wp_postmeta и сравнить с текущей датой.

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

Шаг 1. Добавляем функцию для удаления купонов с истекшим сроком действия или неактивных

В файл functions.php вашей дочерней темы или в собственный плагин добавьте следующий код:

function wc_delete_inactive_coupons() {
    $args = array(
        'post_type'      => 'shop_coupon',
        'posts_per_page' => -1,
        'post_status'    => array('draft', 'trash'),
        'fields'         => 'ids',
    );

    $inactive_coupons = get_posts($args);

    // Удаляем купоны со статусом draft и trash
    foreach ($inactive_coupons as $coupon_id) {
        wp_delete_post($coupon_id, true); // true - удаление без корзины
    }

    // Дополнительно удаляем купоны с истекшим сроком действия
    $expired_coupons = get_posts(array(
        'post_type'  => 'shop_coupon',
        'numberposts' => -1,
        'fields'      => 'ids',
        'meta_query' => array(
            array(
                'key'     => 'expiry_date',
                'value'   => date('Y-m-d'),
                'compare' => '<',
                'type'    => 'DATE',
            ),
        ),
    ));

    foreach ($expired_coupons as $coupon_id) {
        wp_delete_post($coupon_id, true);
    }
}

// Запускаем очистку по крону или вручную
add_action('wp_loaded', 'wc_delete_inactive_coupons');

Шаг 2. Автоматизация удаления через WP-Cron

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

function wc_schedule_coupon_cleanup() {
    if (!wp_next_scheduled('wc_coupon_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wc_coupon_cleanup_hook');
    }
}
add_action('wp', 'wc_schedule_coupon_cleanup');

add_action('wc_coupon_cleanup_hook', 'wc_delete_inactive_coupons');

Это будет запускать удаление неактивных и просроченных купонов один раз в день.

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

  • В админке WooCommerce перейдите в раздел «Купоны» и проверьте количество купонов со статусом draft, trash и просроченных.
  • Запустите функцию вручную (например, временно вызвав wc_delete_inactive_coupons() через консоль или по хуку) и посмотрите, что купоны удаляются.
  • Проверьте логи сервера на ошибки при выполнении cron-задачи.

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

  • Удаляются нужные купоны: Проверьте фильтры в get_posts, чтобы не захватывать активные купоны. Можно добавить проверку по дате окончания и статусу publish.
  • Крон-задача не запускается: Проверьте, активирован ли WP-Cron на сайте, и нет ли конфликтов с плагинами безопасности или хостингом, которые блокируют WP-Cron.
  • Купоны не удаляются: Убедитесь, что у пользователя, под которым запускается скрипт, есть права на удаление постов. Также проверьте, не блокирует ли безопасность запросы на удаление.

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

  • Удаление купонов напрямую через wp_delete_post с параметром true исключает помещение в корзину, что экономит место в базе.
  • Настройте резервное копирование базы данных перед автоматическим удалением, чтобы избежать потери данных при ошибках.
  • Используйте WP-CLI для массового удаления купонов при больших объемах данных — это быстрее и менее нагружает сайт.

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

Метод Описание Плюсы Минусы
Код в functions.php + WP-Cron Автоматическое удаление через планировщик WordPress Полный контроль, не требует плагинов Зависит от работы WP-Cron, нагрузка при большом количестве купонов
Ручное удаление через админку Удаление купонов вручную в панели управления Простой способ, не требует кода Трудоемко при большом количестве, риск пропустить купоны
Использование WP-CLI Командная строка для массового удаления купонов Быстро, эффективно при большом объеме Требует доступа к серверу и навыков работы с CLI
WooCommerce: как автоматически удалять отменённые заказы и товары с нулевым остатком
07.06.2026
Автоматическое удаление спама в комментариях WordPress
15.12.2025
WooCommerce: как автоматически удалять заказы со статусом «Отменено»
12.05.2026
WooCommerce не работает отправка писем после покупки: что делать
20.04.2026
Как создать автоматическое удаление старого контента в WordPress
23.12.2025