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

В чем суть задачи и зачем удалять пользователя после отмены подписки

В WooCommerce с подписками (WooCommerce Subscriptions) пользователи могут отменять подписки. Иногда возникает задача — полностью удалить учетную запись пользователя после отмены подписки, чтобы очистить базу и предотвратить доступ к контенту. Особенно актуально для сервисов с платным доступом, где отмена подписки означает прекращение отношений.

В стандартном WooCommerce такой функционал отсутствует. Нужно реализовать автоматическое удаление пользователя программно, используя хуки WooCommerce Subscriptions.

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

Подписка в WooCommerce Subscriptions — это тип записи shop_subscription. Ее статус меняется при отмене на cancelled. Чтобы отследить отмену, используем хук 'woocommerce_subscription_status_cancelled', который передает объект подписки.

Важно проверить, что статус подписки действительно изменился и что пользователь существует. Также нужно учитывать, что подписка может быть у нескольких пользователей (в случае совместного аккаунта), но обычно — у одного.

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

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

<?php
add_action('woocommerce_subscription_status_cancelled', 'delete_user_after_subscription_cancelled', 10, 1);
function delete_user_after_subscription_cancelled( $subscription ) {
    // Получаем ID пользователя
    $user_id = $subscription->get_user_id();

    if ( ! $user_id ) {
        error_log('Подписка отменена, но пользователь не найден.');
        return;
    }

    // Получаем объект пользователя
    $user = get_user_by('ID', $user_id);
    if ( ! $user ) {
        error_log('Пользователь с ID ' . $user_id . ' не существует.');
        return;
    }

    // Проверяем, не админ ли пользователь (рекомендуется не удалять админов)
    if ( in_array('administrator', $user->roles) ) {
        error_log('Попытка удалить администратора запрещена.');
        return;
    }

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

Объяснение:

  • Хук woocommerce_subscription_status_cancelled срабатывает при смене статуса подписки на "отменена".
  • Получаем ID пользователя из объекта подписки.
  • Проверяем существование пользователя и роль, чтобы не удалять админов.
  • Удаляем пользователя функцией wp_delete_user, удаляя все его данные и контент.

Как проверить, что решение работает

  1. Создайте тестовую подписку на сайте и свяжите с тестовым пользователем.
  2. Отмените подписку через Личный кабинет или админку WooCommerce.
  3. Проверьте, что пользователь автоматически удалился из базы (wp_users).
  4. Проверьте логи ошибок PHP (если включено), чтобы увидеть записи error_log.
  5. Убедитесь, что пользователь не может войти на сайт после отмены.

Частые ошибки и как их избежать

  • Удаление администратора. Если не добавить проверку роли, можно случайно удалить админа. Это критично. Добавьте проверку ролей.
  • Подписка без пользователя. Некоторые подписки могут быть анонимными или без связанного пользователя. В этом случае код должен корректно игнорировать удаление.
  • Потеря данных. Если пользователь владеет важным контентом (публикациями, заказами), удаление может привести к проблемам. Рассмотрите опцию передачи контента другому пользователю в wp_delete_user.
  • Несовместимость с кэшированием. Если сайт сильно кэшируется, пользователь может быть виден еще некоторое время. Почистите кэш после удаления.

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

  • Всегда делайте резервные копии базы перед внедрением автоматического удаления пользователей.
  • Добавьте логирование действий удаления для последующего аудита.
  • Рассмотрите создание отдельного плагина с этой функциональностью для удобства поддержки.
  • Для крупных магазинов с большим количеством подписчиков лучше запускать удаление пользователей в фоне (WP Cron) во избежание долгих запросов.

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

ВариантПлюсыМинусы
Автоматическое удаление через хук (как в статье)Полностью автоматизировано, надежно, без плагиновРиск удаления важных пользователей, требует тестирования
Удаление вручную через админкуКонтроль над процессом, меньше рискаНе автоматизировано, требует времени
Использование сторонних плагинов для управления пользователямиДополнительные функции, удобный интерфейсЗависимость от плагина, возможные конфликты
Как создать собственную авторизацию в WordPress: практические примеры и код
09.11.2025
WordPress OTP авторизация через SMS и Email: настройка и примеры кода
14.12.2025
WordPress авторизация через REST API с токеном для приватной сети
19.03.2026
WordPress удаление пользователя при удалённом запросе: практическое руководство
06.12.2025
WooCommerce: ограничение доступа к продуктам по ролям пользователей
07.05.2026