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

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

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

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

Если просто удалить пользователя из административной панели WordPress, то данные о его подписках могут остаться активными в базе данных. Это ведёт к нескольким проблемам:

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

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

Используем хук delete_user для отработки удаления

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

Пример функции, которая будет вызвана при удалении пользователя:

function wpreset_delete_user_cancel_subscriptions($user_id) {
    // Логика отключения подписок
    // Например, получить все подписки пользователя и отключить их
}

Регистрируем этот обработчик так:

add_action('delete_user', 'wpreset_delete_user_cancel_subscriptions');

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

Если вы используете плагин WooCommerce Subscriptions (один из самых популярных для подписок), то для поиска подписок пользователя можно использовать следующий подход:

function wpreset_delete_user_cancel_subscriptions($user_id) {
    if (!class_exists('WC_Subscriptions_Manager')) {
        return; // Плагин подписок не активен
    }

    $subscriptions = wcs_get_users_subscriptions($user_id);
    foreach ($subscriptions as $subscription) {
        if ($subscription->has_status('active')) {
            $subscription->cancel_order(); // Отменяем подписку
        }
    }
}

Эта функция получает все подписки пользователя и отменяет активные.

Отключение подписок в плагине Paid Memberships Pro

Для других популярных плагинов подписок логика может отличаться. Например, в Paid Memberships Pro можно деактивировать уровень доступа или подписку через API плагина:

function wpreset_delete_user_cancel_subscriptions($user_id) {
    if (!function_exists('pmpro_hasMembershipLevel')) {
        return; // Плагин не активен
    }

    // Удаляем все уровни подписки у пользователя
    $levels = pmpro_getMembershipLevelsForUser($user_id);
    foreach ($levels as $level) {
        pmpro_changeMembershipLevel(0, $user_id); // Снимаем уровень
    }
}

Рекомендации по автоматизации с помощью плагинов

Если вы не хотите писать код самостоятельно, рассмотрите плагины с поддержкой автоматизации:

  • Clearfy Pro — плагин для оптимизации и управления функциями WordPress, в том числе автоматическими процессами.
  • WPReset — для быстрого восстановления сайта, но может пригодиться для автоматизации и тестирования процессов удаления пользователей.

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

Расширенный пример: логирование отмен подписок

Для контроля процессов стоит добавить логирование в функцию отмены подписок. Это поможет отслеживать ошибки и успешные операции.

function wpreset_delete_user_cancel_subscriptions($user_id) {
    if (!class_exists('WC_Subscriptions_Manager')) {
        error_log("[WPReset] Плагин WooCommerce Subscriptions не активен");
        return;
    }

    $subscriptions = wcs_get_users_subscriptions($user_id);
    if (empty($subscriptions)) {
        error_log("[WPReset] Нет подписок для пользователя ID: $user_id");
        return;
    }

    foreach ($subscriptions as $subscription) {
        if ($subscription->has_status('active')) {
            $subscription->cancel_order();
            error_log("[WPReset] Отменена подписка ID: " . $subscription->get_id() . " для пользователя ID: $user_id");
        }
    }
}

add_action('delete_user', 'wpreset_delete_user_cancel_subscriptions');

Особенности и подводные камни при работе с подписками

При реализации автоматической отмены подписок учитывайте:

  • Кэш и задержки: иногда данные о подписках кэшируются, и отмена может не примениться мгновенно.
  • Платёжные шлюзы: интеграция с платёжной системой должна корректно обрабатывать отмену, иначе деньги будут списываться.
  • Права доступа: функция должна запускаться с достаточными правами.
  • Резервное копирование: перед массовыми удалениями всегда делайте бэкап.

Как протестировать автоматическую отмену подписок

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

Как создать и использовать собственные типы записей (Custom Post Types) в WordPress
22.11.2025
Как автоматически отключать подписки в WordPress при удалении пользователя
09.03.2026
Как очистить базу данных WordPress от мусора и удалённых остатков
06.03.2026
Как правильно удалить WooCommerce без потери данных
03.05.2026
Как удалить или изменить тип записи WooCommerce без потери данных
24.05.2026