Как автоматически отключать подписки в 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 для отката изменений при ошибках во время разработки.

Как удалить все записи WordPress одной кнопкой
09.12.2025
Как использовать WPReset для быстрого восстановления базы данных WordPress
22.01.2026
Как создать и использовать собственные типы записей (Custom Post Types) в WordPress
22.11.2025
Как изменить структуру ссылок в WordPress без потери SEO
17.12.2025
Как использовать REST API WordPress для автоматизации и расширения функционала
13.12.2025