Что значит «неактивный клиент» в WooCommerce и зачем его удалять
Неактивными клиентами обычно называют пользователей, которые зарегистрировались в магазине, но долгое время не совершали покупок и не входили в аккаунт. Такие учетные записи засоряют базу данных, замедляют работу административной панели и могут усложнять аналитику. Автоматическое удаление неактивных клиентов помогает поддерживать базу в чистоте и улучшает производительность WooCommerce.
Диагностика проблемы: как выявить неактивных клиентов
Для начала нужно определить критерии неактивности. Обычно используют дату последнего логина или дату последнего заказа. Если даты не фиксируются, их нужно начать сохранять.
- Проверка даты последнего входа: WordPress по умолчанию не хранит дату последнего входа пользователя. Для этого требуется добавить дополнительный код, который обновляет мета-поле при каждом входе.
- Проверка даты последнего заказа: WooCommerce хранит заказы, поэтому можно проверить дату последнего заказа пользователя.
Код для записи даты последнего входа пользователя
add_action('wp_login', 'update_last_login_meta', 10, 2);
function update_last_login_meta($user_login, $user) {
update_user_meta($user->ID, 'last_login', current_time('mysql'));
}Этот код нужно добавить в functions.php вашей темы или в отдельный плагин.
Запрос для получения неактивных клиентов
Допустим, мы считаем неактивными пользователей, которые не заходили больше 6 месяцев и не делали заказов за это время.
$six_months_ago = date('Y-m-d H:i:s', strtotime('-6 months'));
$args = [
'role' => 'customer',
'meta_query' => [
[
'key' => 'last_login',
'value' => $six_months_ago,
'compare' => '<=',
'type' => 'DATETIME'
]
],
'fields' => 'ID'
];
$users = get_users($args);
// Проверим дату последнего заказа каждого пользователя
foreach ($users as $user_id) {
$orders = wc_get_orders([
'customer_id' => $user_id,
'limit' => 1,
'orderby' => 'date',
'order' => 'DESC'
]);
if (empty($orders) || $orders[0]->get_date_created()->getTimestamp() <= strtotime($six_months_ago)) {
// пользователь неактивен
}
}Пошаговое решение: автоматическое удаление неактивных клиентов
1. Установка и настройка механизма записи даты последнего логина
Добавьте код из предыдущего раздела для записи даты последнего входа.
2. Скрипт для удаления неактивных пользователей
Ниже пример функции, которая удалит пользователей, не заходивших и не покупавших более 6 месяцев.
function delete_inactive_customers() {
$six_months_ago = date('Y-m-d H:i:s', strtotime('-6 months'));
$args = [
'role' => 'customer',
'meta_query' => [
[
'key' => 'last_login',
'value' => $six_months_ago,
'compare' => '<=',
'type' => 'DATETIME'
]
],
'fields' => 'ID'
];
$users = get_users($args);
foreach ($users as $user_id) {
$orders = wc_get_orders([
'customer_id' => $user_id,
'limit' => 1,
'orderby' => 'date',
'order' => 'DESC'
]);
$last_order_date = $orders ? $orders[0]->get_date_created()->getTimestamp() : 0;
if ($last_order_date <= strtotime($six_months_ago)) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
wp_delete_user($user_id);
}
}
}3. Автоматизация через WP-Cron
Чтобы запускать очистку регулярно, добавьте событие WP-Cron:
if (!wp_next_scheduled('delete_inactive_customers_event')) {
wp_schedule_event(time(), 'daily', 'delete_inactive_customers_event');
}
add_action('delete_inactive_customers_event', 'delete_inactive_customers');Проверка результата после внедрения
- Посмотрите в базу пользователей через админку — неактивные клиенты должны исчезнуть.
- Запустите функцию вручную (например, через WP-CLI или временно вызвав функцию в теме) и проверьте вывод ошибок.
- Проверьте, что активные пользователи (с заказами менее 6 месяцев назад) остались.
Частые ошибки и как их исправить
- Дата последнего логина не обновляется: Убедитесь, что хук
wp_loginподключен и код добавлен в правильное место. Проверьте, что пользователи действительно входят в систему. - Удаляются клиенты с недавними заказами: Проверьте корректность сравнения дат и таймзону сервера.
- WP-Cron не срабатывает: На некоторых хостингах WP-Cron зависит от посещений сайта. Можно настроить системный cron или запускать вручную.
- Ошибки при удалении пользователя: Убедитесь, что подключен файл
wp-admin/includes/user.phpперед вызовомwp_delete_user.
Практические советы по безопасности и производительности
- Перед массовым удалением сделайте резервную копию базы данных.
- Логируйте удаляемых пользователей, чтобы можно было восстановить данные при ошибке.
- Ограничьте количество удаляемых пользователей за один запуск, чтобы избежать таймаутов.
- Проверьте, что автоматическое удаление не конфликтует с плагинами управления пользователями или CRM.
Сравнение вариантов удаления неактивных клиентов
| Метод | Преимущества | Недостатки | Компромисс |
|---|---|---|---|
| Плагин (например, WP Bulk Delete) | Простота настройки, UI для фильтрации | Может быть избыточным, нагрузка на БД | Использовать для разовой чистки |
| Код (как в статье) | Точный контроль, автоматизация, без лишних плагинов | Требуется понимание PHP, тестирование | Использовать при регулярной очистке |
| Ручное удаление | Безопасно, минимальный риск ошибок | Трудозатратно, не подходит для больших баз | Использовать для малых магазинов |