Диагностика проблемы с отменой подписок и удалением пользователя
В 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 дочерней темы, чтобы избежать потери изменений при обновлении.
Проверка результата после внедрения
- Создайте тестового пользователя и оформите подписку.
- Отмените подписку вручную в админке WooCommerce.
- Проверьте, удалился ли пользователь из списка пользователей.
- Убедитесь, что другие пользователи с активными подписками не удаляются.
Для отладки можно временно добавить логирование, например, через 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 + скрипт на сервере |