Диагностика проблемы: зачем удалять неактивных клиентов по дате регистрации
В интернет-магазинах на WooCommerce список пользователей со временем растет, включая множество неактивных клиентов, которые зарегистрировались, но так и не сделали покупок. Это нагружает базу данных и админку, замедляет выборки и может мешать маркетинговым процессам. Удаление таких клиентов по дате регистрации и отсутствию активности — эффективный способ оптимизации.
Как понять, что у вас есть неактивные клиенты?
- Большое количество пользователей с ролью
customer, у которых нет заказов; - Пользователи, зарегистрировавшиеся более 180 дней назад;
- Отсутствие активности в виде заказов, отзывов, комментариев.
Пошаговое решение: автоматическое удаление неактивных клиентов по дате регистрации с помощью кода
Для автоматизации удалений добавим WP-Cron задачу, которая будет запускаться, например, раз в неделю, и удалять клиентов, зарегистрированных более 6 месяцев назад, если у них нет заказов.
1. Создание функции удаления
function wc_delete_inactive_customers_by_registration_date() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-180 days'));
// Получаем ID пользователей с ролью customer, зарегистрированных до даты порога
$user_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->users} WHERE user_registered < %s",
$date_threshold
));
if (empty($user_ids)) {
return;
}
foreach ($user_ids as $user_id) {
$user = get_userdata($user_id);
if (in_array('customer', (array) $user->roles, true)) {
$orders = wc_get_orders(array(
'customer_id' => $user_id,
'limit' => 1
));
// Удаляем пользователя, если заказов нет
if (empty($orders)) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}
}
}2. Регистрация WP-Cron задачи
add_action('wc_delete_inactive_customers_event', 'wc_delete_inactive_customers_by_registration_date');
function wc_schedule_inactive_customers_deletion() {
if (!wp_next_scheduled('wc_delete_inactive_customers_event')) {
wp_schedule_event(time(), 'weekly', 'wc_delete_inactive_customers_event');
}
}
add_action('wp', 'wc_schedule_inactive_customers_deletion');3. Очистка при деактивации темы или плагина
function wc_unschedule_inactive_customers_deletion() {
$timestamp = wp_next_scheduled('wc_delete_inactive_customers_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wc_delete_inactive_customers_event');
}
}
register_deactivation_hook(__FILE__, 'wc_unschedule_inactive_customers_deletion');Проверка результата после внедрения
- Проверить наличие запланированного события в разделе
wp cron event list(через WP-CLI или плагин WP Crontrol). - Запустить функцию вручную вызовом
wc_delete_inactive_customers_by_registration_date()для проверки. - Проверить базу пользователей — должны пропасть клиенты без заказов старше 180 дней.
- Убедиться, что активные клиенты и администраторы не удалены.
Частые ошибки и как их исправить
- Ошибка: Пользователи не удаляются.
Причина: Неправильное использование ролей или неверная проверка заказов.
Решение: Проверьте, что рольcustomerдействительно установлена, и используйтеwc_get_orders()с правильными параметрами. - Ошибка: WP-Cron событие не запускается.
Причина: WP-Cron зависит от посещений сайта.
Решение: Используйте системный cron для вызоваwp-cron.phpили плагин WP Crontrol для отладки. - Ошибка: Удаляются активные клиенты.
Причина: Ошибка в логике проверки заказов.
Решение: Добавьте дополнительные проверки, например, наличие хотя бы одного заказа со статусомcompletedилиprocessing.
Практические советы по безопасности и производительности
- Резервное копирование: Перед массовым удалением пользователей делайте резервную копию базы данных.
- Пакетная обработка: Если пользователей много, обрабатывайте их партиями (например, по 50 за раз), чтобы избежать таймаута скрипта.
- Ограничение по ролям: Убедитесь, что не удаляете пользователей с административными правами.
- Логирование: Добавьте запись в лог удалённых пользователей для аудита.
Сравнение методов удаления неактивных клиентов
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Ручное удаление через админку | Просто, не требует кода | Неэффективно при большом количестве | Панель пользователей WooCommerce |
| Плагин для очистки пользователей | Удобно, встроенный интерфейс | Может замедлять сайт, зависимость от плагина | User Cleanup, WP Bulk Delete |
| Автоматизация через WP-Cron и код | Гибко, без сторонних плагинов, контролируемо | Требует навыков разработки, настройка cron | Код из статьи |