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

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

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

Основной вопрос: как автоматически удалить пользователя WordPress при отмене подписки WooCommerce, чтобы избежать ручной работы и ошибок?

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

Используем хук WooCommerce Subscriptions

Для управления событиями подписок WooCommerce предоставляет хуки. Нам нужен хук, который сработает при смене статуса подписки на «отменена» (cancelled).

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

add_action('woocommerce_subscription_status_cancelled', 'wpauth_delete_user_on_subscription_cancel', 10, 1);

function wpauth_delete_user_on_subscription_cancel($subscription) {
    // Получаем ID пользователя, связанного с подпиской
    $user_id = $subscription->get_user_id();
    
    if (!$user_id) {
        error_log('Подписка без пользователя: ' . $subscription->get_id());
        return;
    }

    // Проверяем, что пользователь не администратор
    if (user_can($user_id, 'administrator')) {
        error_log('Попытка удалить администратора: ' . $user_id);
        return;
    }

    // Удаляем пользователя вместе с метаданными
    require_once ABSPATH . 'wp-admin/includes/user.php';
    wp_delete_user($user_id);
    
    error_log('Пользователь удалён по отмене подписки: ' . $user_id);
}

Объяснение кода

  • woocommerce_subscription_status_cancelled срабатывает при отмене подписки.
  • Получаем ID пользователя через $subscription->get_user_id().
  • Проверяем, что это не админ — важная мера безопасности.
  • Удаляем пользователя через wp_delete_user().
  • Добавлены записи в лог для отладки.

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

Чтобы проверить, что решение работает:

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

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

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

  • Пользователь не удаляется: Возможно, пользователь — администратор или у него есть активные заказы. Проверьте права и состояние заказов.
  • Функция не срабатывает: Убедитесь, что плагин WooCommerce Subscriptions активен и версия совместима.
  • Ошибки при удалении: Проверьте, подключен ли файл user.php через require_once. Без него wp_delete_user() может не работать вне админки.
  • Удаление приводит к ошибкам при загрузке страницы: Возможно, другие плагины или темы обращаются к удалённому пользователю. Проверьте зависимости.

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

  • Запрещайте удалять администраторов через такой механизм.
  • Резервное копирование базы перед массовым удалением пользователей.
  • Если пользователей много, используйте пакетное удаление с кроном, чтобы не нагружать сервер.
  • Логируйте все действия для аудита и диагностики.

Альтернативы и сравнение решений

МетодОписаниеПлюсыМинусы
Хук на отмену подписки + wp_delete_user() Автоматическое удаление при отмене подписки Простота; автоматизация; точечный контроль Не подходит для сложных сценариев; можно случайно удалить важного юзера
Ручное удаление через админку Удаление пользователя вручную после отмены Контроль и безопасность Трудозатратно; риск забыть удалить
Плагин для управления подписками и пользователями Использование готовых решений Доп. функции; поддержка Может быть излишним; нагрузка
Как сделать автоматическую разблокировку пользователей в WordPress после блокировки
02.04.2026
WordPress авторизация через временные ссылки: настройка и примеры кода
22.03.2026
WooCommerce: автоматическое изменение роли пользователя после первой покупки
28.05.2026
WordPress авторизация без cookie: решение проблем и примеры кода
06.02.2026
WordPress установка и настройка OAuth2 сервера: пошаговое руководство с примерами кода
30.12.2025