wpdownload.ru wordpress WPDownload.ru

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

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

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

Чтобы убедиться, что в вашей базе есть просроченные купоны, выполните SQL-запрос в phpMyAdmin или через WP CLI:

SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'shop_coupon' AND ID IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'expiry_date' AND meta_value < UNIX_TIMESTAMP());

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

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

1. Создаем функцию удаления просроченных купонов

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

function wpdownload_remove_expired_coupons() {
    $current_time = current_time( 'timestamp' );
    $args = array(
        'post_type'      => 'shop_coupon',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => 'expiry_date',
                'value'   => $current_time,
                'compare' => '<',
                'type'    => 'NUMERIC',
            ),
        ),
        'fields'         => 'ids',
    );
    $expired_coupons = get_posts( $args );
    if ( ! empty( $expired_coupons ) ) {
        foreach ( $expired_coupons as $coupon_id ) {
            wp_delete_post( $coupon_id, true );
        }
    }
}

2. Запускаем функцию по расписанию (cron)

Добавьте хук для запуска очистки ежедневно:

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

// Добавляем обработчик
add_action( 'wpdownload_daily_remove_expired_coupons', 'wpdownload_remove_expired_coupons' );

// При деактивации нужно очистить крон
function wpdownload_deactivate_cron() {
    $timestamp = wp_next_scheduled( 'wpdownload_daily_remove_expired_coupons' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wpdownload_daily_remove_expired_coupons' );
    }
}
register_deactivation_hook( __FILE__, 'wpdownload_deactivate_cron' );

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

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

  • Вручную создать купон с датой окончания, например, вчерашним числом.
  • Выполнить функцию wpdownload_remove_expired_coupons() вручную, вызвав ее в админке через временный сниппет или wp-cli.
  • Проверить, что купон исчез из списка купонов в WooCommerce.
  • После запуска по расписанию проверяйте список купонов через несколько дней — просроченные купоны должны автоматически удаляться.

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

  • Купоны не удаляются: проверьте, что мета-ключ expiry_date хранит UNIX timestamp. Иногда дата хранится в формате YYYY-MM-DD — тогда запрос и сравнение нужно адаптировать.
  • Крон не запускается: убедитесь, что у вас активирован WP Cron и сайт получает трафик. Можно настроить системный cron для вызова wp-cron.php.
  • Удаление купонов не желательное: замените wp_delete_post( $coupon_id, true ) на wp_trash_post( $coupon_id ) для перемещения в корзину, а не полного удаления.

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

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

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

Способ Плюсы Минусы
Ручное удаление через админку Просто, не требует кода Неэффективно при большом количестве купонов
Автоматический WP Cron с кодом Полная автоматизация, гибкость Требует навыков программирования
Плагины для управления купонами Графический интерфейс, дополнительные функции Могут замедлять сайт, не всегда бесплатны
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее