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

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

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

Типичные признаки, что нужна автоматизация:

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

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

Отмена подписки в WooCommerce Subscriptions фиксируется через действие woocommerce_subscription_status_updated. Подписка имеет статусы: active, on-hold, cancelled и другие. Нам интересен переход статуса на cancelled.

Пример отслеживания отмены подписки:

add_action('woocommerce_subscription_status_updated', 'check_subscription_status_cancelled', 10, 3);function check_subscription_status_cancelled($subscription, $new_status, $old_status) {    if ($new_status === 'cancelled') {        // логика отключения и удаления пользователя    }}

Пошаговое решение: автоматическое отключение подписки и удаление пользователя

1. Отслеживаем отмену подписки

Добавляем хук, который реагирует на изменение статуса подписки:

add_action('woocommerce_subscription_status_updated', 'auto_delete_user_on_subscription_cancel', 10, 3);function auto_delete_user_on_subscription_cancel($subscription, $new_status, $old_status) {    if ($new_status === 'cancelled') {        $user_id = $subscription->get_user_id();        if ($user_id) {            // отключаем подписку (на всякий случай)            $subscription->update_status('cancelled');            // удаляем пользователя            require_once ABSPATH . 'wp-admin/includes/user.php';            wp_delete_user($user_id);        }    }}

2. Проверка безопасности

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

Добавим проверку:

function has_active_subscriptions($user_id) {    $subscriptions = wcs_get_users_subscriptions($user_id);    foreach ($subscriptions as $subscription) {        if ($subscription->has_status('active')) {            return true;        }    }    return false;}

И используем её перед удалением:

if ($user_id && !has_active_subscriptions($user_id)) {    wp_delete_user($user_id);}

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

Чтобы проверить, что автоматизация работает:

  1. Создайте тестового пользователя и оформите подписку.
  2. Отмените подписку через личный кабинет или админку WooCommerce.
  3. Проверьте, что подписка получает статус cancelled.
  4. Проверьте, что пользователь удален из базы (через wp-admin или базу данных).
  5. Убедитесь, что при наличии других активных подписок пользователь не удаляется.

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

  • Ошибка: Пользователь не удаляется после отмены подписки.
    Причина: Отсутствует проверка статуса подписки или неправильный хук.
    Решение: Убедитесь в использовании woocommerce_subscription_status_updated и проверке статуса cancelled.
  • Ошибка: Пользователь удаляется, хотя у него есть другие активные подписки.
    Причина: Отсутствие проверки на наличие других активных подписок.
    Решение: Добавьте проверку через wcs_get_users_subscriptions перед удалением.
  • Ошибка: Ошибка при удалении пользователя из-за отсутствия подключения wp-admin/includes/user.php.
    Решение: Добавьте require_once ABSPATH . 'wp-admin/includes/user.php'; перед вызовом wp_delete_user().

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

  • Резервное копирование: Перед автоматическим удалением пользователей сделайте резервное копирование базы данных, чтобы избежать потери данных.
  • Логирование действий: Записывайте события удаления пользователей в отдельный лог для аудита и восстановления при необходимости.
  • Оптимизация вызовов: Используйте кэширование и минимизируйте вызовы к базе при проверках подписок, особенно при большом количестве пользователей.
  • Тестирование на staging-сервере: Перед внедрением на живом сайте протестируйте код на тестовой среде.

Сравнение вариантов реализации

Вариант Плюсы Минусы
Ручное удаление пользователей Простота, контроль Высокая нагрузка, ошибки, задержки
Автоматизация через хук WooCommerce Subscriptions Экономия времени, надежность, безопасность Требует тестирования, возможны ошибки при некорректном коде
Использование сторонних плагинов Готовые решения, поддержка Зависимость от разработчика, нагрузка, стоимость
WooCommerce авторизация через SMS без использования SMS-провайдеров: практическое решение
11.05.2026
WordPress кастомные сообщения об ошибках при входе: настройка и примеры
01.12.2025
Как создать кастомный плагин для журналов входов в WordPress
16.03.2026
WooCommerce: автоматическое изменение роли пользователя после первой покупки
01.07.2026
WordPress OTP авторизация без использования SMS-провайдеров: практическое решение
10.06.2026