Диагностика проблемы: зачем удалять неактивные купоны в 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.
Проверка результата после внедрения
Чтобы проверить, что решение работает:
- Создайте купон с истекшей датой и неиспользованным статусом.
- Подождите выполнение WP-Cron (или запустите вручную с помощью плагина WP Crontrol).
- Проверьте, что купон удалён из админки 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 | Удобство, расширенный функционал | Дополнительная нагрузка, возможные конфликты |