Почему важно удалять неактивных пользователей в WooCommerce
В интернет-магазине на WooCommerce база пользователей с течением времени может разрастаться за счёт неактивных аккаунтов. Это приводит к увеличению нагрузки на базу данных, замедлению работы сайта и даже повышению риска безопасности. Автоматическое удаление неактивных пользователей помогает поддерживать чистоту базы и улучшать производительность.
Диагностика: кто считается неактивным пользователем
В контексте WooCommerce неактивным можно считать пользователя, который не совершал покупок и не заходил на сайт в течение определённого времени (например, 6 месяцев). Чтобы проверить, сколько таких пользователей у вас есть, используйте следующий SQL-запрос через phpMyAdmin или wp-cli:
SELECT ID, user_login, user_email, user_registered, last_login.meta_value AS last_login_date
FROM wp_users
LEFT JOIN wp_usermeta AS last_login ON wp_users.ID = last_login.user_id AND last_login.meta_key = 'last_login'
WHERE (last_login.meta_value < DATE_SUB(NOW(), INTERVAL 6 MONTH) OR last_login.meta_value IS NULL)
AND wp_users.ID NOT IN (
SELECT DISTINCT user_id FROM wp_wc_customer_lookup
WHERE last_order_date > DATE_SUB(NOW(), INTERVAL 6 MONTH)
);Этот запрос ищет пользователей, у которых дата последнего входа старше 6 месяцев или неизвестна, и которые не совершали заказов за последние 6 месяцев.
Настройка автоматического удаления неактивных пользователей
Шаг 1. Отслеживание даты последнего входа
По умолчанию WordPress не хранит дату последнего входа пользователя. Добавим сохранение этой даты при авторизации:
function save_last_login_timestamp($login, $user) {
update_user_meta($user->ID, 'last_login', current_time('mysql'));
}
add_action('wp_login', 'save_last_login_timestamp', 10, 2);Шаг 2. Создание WP-Cron задачи для удаления пользователей
Добавим планировщик, который будет запускать функцию удаления неактивных пользователей раз в сутки:
function schedule_inactive_user_cleanup() {
if (!wp_next_scheduled('delete_inactive_woocommerce_users')) {
wp_schedule_event(time(), 'daily', 'delete_inactive_woocommerce_users');
}
}
add_action('wp', 'schedule_inactive_user_cleanup');Шаг 3. Реализация функции удаления
Функция будет искать пользователей, которые не заходили и не покупали более 6 месяцев, и удалять их:
function delete_inactive_woocommerce_users() {
global $wpdb;
$threshold_date = date('Y-m-d H:i:s', strtotime('-6 months'));
$users_to_delete = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->users} u
LEFT JOIN {$wpdb->usermeta} lm ON u.ID = lm.user_id AND lm.meta_key = 'last_login'
LEFT JOIN wp_wc_customer_lookup cl ON u.ID = cl.user_id
WHERE (lm.meta_value < %s OR lm.meta_value IS NULL)
AND (cl.last_order_date < %s OR cl.last_order_date IS NULL)",
$threshold_date, $threshold_date
));
foreach ($users_to_delete as $user_id) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
wp_delete_user($user_id);
}
}
add_action('delete_inactive_woocommerce_users', 'delete_inactive_woocommerce_users');Проверка результата после внедрения
Чтобы проверить, что удаление работает:
- Вручную создайте тестового пользователя с датой последнего входа и заказом старше 6 месяцев (через базу или wp-cli).
- Запустите событие вручную через wp-cli:
wp cron event run delete_inactive_woocommerce_users. - Проверьте, что этот пользователь удалён (через админку или запрос к базе).
- Отслеживайте логи ошибок и уведомления на случай сбоев.
Частые ошибки и как их исправить
- Пользователи не удаляются: Проверьте, что задача wp-cron действительно выполняется. Для этого можно использовать плагин WP Crontrol или запускать команду вручную.
- Удаляются лишние пользователи: Убедитесь, что условия в SQL-запросе корректны и не учитывают активных пользователей. Проверьте корректность хранения даты last_login.
- Ошибка при удалении пользователя: Проверьте, что функция
wp_delete_userподключена черезrequire_once, и что у пользователя нет критически важных зависимостей (например, админские права).
Практические советы по безопасности и производительности
- Добавьте логирование удалённых пользователей для возможности аудита.
- Перед удалением можно отправлять уведомления на email администратору.
- Выбирайте разумный период неактивности, чтобы не потерять потенциальных клиентов.
- Для больших баз данных используйте пагинацию при выборке пользователей для удаления, чтобы избежать таймаутов.
- Рассмотрите использование плагина Clearfy Pro для дополнительной оптимизации базы и управления пользователями (Подробнее о Clearfy Pro).
Сравнение подходов для удаления неактивных пользователей WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| WP-Cron + кастомный код | Полный контроль, бесплатно, гибкость | Требует знаний, возможны ошибки в логике, нагрузка на БД |
| Плагины для очистки пользователей | Простота, готовые настройки, поддержка | Могут быть платными, ограниченная кастомизация |
| Ручное удаление через базу данных | Быстро для одного раза | Риск ошибок, нет автоматизации, опасно для новичков |