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

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

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

Чтобы проверить, сталкиваетесь ли вы с этой проблемой, выполните следующие шаги:

  • Перейдите в WooCommerce > Подписки и найдите отменённые подписки.
  • Проверьте, остался ли пользователь, связанный с отменённой подпиской, в разделе Пользователи WordPress.
  • Отслеживайте, не создаются ли новые неактивные пользователи после отмены подписки.

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

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

1. Подключение к хуку отмены подписки

WooCommerce Subscriptions предоставляет хук woocommerce_subscription_status_cancelled, который срабатывает при отмене подписки. Его можно использовать для запуска кастомного кода.

2. Логика удаления пользователя и отключения подписки

Ниже пример кода, который отключает подписку и удаляет пользователя, если у него нет других активных подписок.

add_action('woocommerce_subscription_status_cancelled', 'auto_cancel_subscription_and_delete_user', 10, 1);
function auto_cancel_subscription_and_delete_user($subscription) {
    $user_id = $subscription->get_user_id();
    if (!$user_id) {
        return;
    }

    // Проверяем наличие других активных подписок
    $subscriptions = wcs_get_users_subscriptions($user_id);
    $active_subscriptions = 0;
    foreach ($subscriptions as $sub) {
        if ($sub->has_status('active')) {
            $active_subscriptions++;
        }
    }

    // Если активных подписок нет, удаляем пользователя
    if ($active_subscriptions === 0) {
        require_once(ABSPATH . 'wp-admin/includes/user.php');
        wp_delete_user($user_id);
    }
}

3. Куда добавить код

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

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

  1. Создайте тестового пользователя и оформите подписку.
  2. Отмените подписку вручную в админке WooCommerce.
  3. Проверьте, удалился ли пользователь из списка пользователей.
  4. Убедитесь, что другие пользователи с активными подписками не удаляются.

Для отладки можно временно добавить логирование, например, через error_log():

error_log('Удаляем пользователя ID: ' . $user_id);

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

  • Пользователь не удаляется: проверьте, подключена ли функция wp_delete_user и нет ли ограничений прав у выполняющего код пользователя.
  • Удаляются не те пользователи: убедитесь, что проверка активных подписок корректна, и код правильно получает пользователя из объекта подписки.
  • Код вызывает фатальные ошибки: проверьте правильность синтаксиса и подключение файла user.php перед вызовом wp_delete_user.

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

  • Не удаляйте пользователя сразу без проверки других активных подписок, чтобы избежать потери данных.
  • Добавьте резервное копирование базы перед автоматическим удалением пользователей.
  • Оптимизируйте количество запросов, используя кэширование, если проверка подписок вызывается часто.
  • Используйте возможности WooCommerce Subscriptions API для корректного управления статусами.

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

ВариантПлюсыМинусыПример использования
Кастомный код в functions.phpПолный контроль, бесплатноТребует навыков, риск ошибокПример выше
Плагины автоматизации подписокПростота установки, поддержкаСтоимость, возможно ограниченная кастомизацияWooCommerce Subscriptions Add-ons
Вебхуки + внешние скриптыГибкость, интеграция с CRMСложность настройкиВебхуки WooCommerce + скрипт на сервере
WooCommerce: авторизация по телефонному номеру без SMS-провайдера
16.05.2026
WooCommerce: как установить автоматическое блокирование пользователей при подозрительной активности
14.07.2026
WordPress авторизация без пароля: как настроить и использовать
31.10.2025
WordPress авторизация через REST API: практическое руководство с примерами кода
25.12.2025
WooCommerce: как реализовать авторизацию через OTP без SMS-провайдеров
13.06.2026