Диагностика проблемы: зачем удалять неактивных клиентов в WooCommerce?
Если ваш интернет-магазин на WooCommerce работает давно, база пользователей может разрастаться за счет неактивных клиентов, которые давно не совершали покупок и не взаимодействовали с сайтом. Это приводит к:
- увеличению нагрузки на базу данных;
- усложнению рассылок и маркетинга из-за устаревших контактов;
- риску безопасности при хранении неиспользуемых аккаунтов.
Удаление неактивных клиентов на основе истории заказов помогает автоматически поддерживать базу в актуальном и оптимальном состоянии.
Как определить неактивного клиента по заказам?
Основной критерий — отсутствие заказов в заданный период, например, 6 или 12 месяцев. Мы можем проверить дату последнего заказа пользователя и удалить аккаунт, если заказов нет или последний заказ старше нужного срока.
Пример SQL-запроса для проверки неактивных пользователей
SELECT u.ID, u.user_email, MAX(p.post_date) AS last_order_date
FROM wp_users u
LEFT JOIN wp_posts p ON p.post_author = u.ID AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY u.ID
HAVING (last_order_date IS NULL OR last_order_date < DATE_SUB(NOW(), INTERVAL 12 MONTH));Этот запрос получает пользователей, у которых нет заказов или последний заказ старше 12 месяцев.
Пошаговое решение: автоматическое удаление неактивных клиентов
1. Создаем функцию для удаления пользователей
function wpbit_delete_inactive_customers() {
global $wpdb;
// Получаем пользователей без заказов или с заказами старше 12 месяцев
$users = $wpdb->get_results(
"SELECT u.ID FROM {$wpdb->users} u
LEFT JOIN {$wpdb->posts} p ON p.post_author = u.ID AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY u.ID
HAVING MAX(p.post_date) IS NULL OR MAX(p.post_date) < DATE_SUB(NOW(), INTERVAL 12 MONTH)"
);
if (!empty($users)) {
foreach ($users as $user) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
wp_delete_user($user->ID);
}
}
}2. Добавляем запуск через WP-Cron
if (!wp_next_scheduled('wpbit_delete_inactive_customers_hook')) {
wp_schedule_event(time(), 'daily', 'wpbit_delete_inactive_customers_hook');
}
add_action('wpbit_delete_inactive_customers_hook', 'wpbit_delete_inactive_customers');Этот код будет запускать проверку и удаление пользователей ежедневно.
Проверка результата после внедрения
- Выполните запрос из раздела диагностики напрямую к базе (например, через phpMyAdmin) и сравните с количеством пользователей в панели WordPress.
- Добавьте временный лог внутри функции удаления для фиксации удаленных пользователей. Например:
error_log('Deleted user ID: ' . $user->ID);- Проверьте, что после запуска Cron неактивные учетные записи исчезают из списка пользователей WordPress.
Частые ошибки и как их исправить
- Удаляются администраторы и важные пользователи: В функцию стоит добавить исключения по ролям, чтобы не удалять админов.
- WP-Cron не запускается: Это частая проблема при низкой посещаемости сайта. Проверьте работу Cron вручную или настройте системный cron на сервере.
- SQL-запрос не учитывает все статусы заказов: Убедитесь, что в запросе перечислены статусы, которые вы считаете активными (например, 'wc-completed', 'wc-processing').
Практические советы по безопасности и производительности
- Перед удалением сделайте резервную копию базы данных.
- Добавьте проверку ролей, чтобы не удалять пользователей с правами администратора и редактора.
- Для больших сайтов используйте пакетную обработку (например, удаляйте по 50 пользователей за раз), чтобы избежать превышения лимита памяти или времени выполнения скрипта.
- Рассмотрите плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpbit.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-neaktivnyh-klientov-po-istorii-zakazov) для расширенной оптимизации базы и управления пользователями.
Итоговый чек-лист для настройки автоматического удаления неактивных клиентов
- Определить период неактивности (например, 12 месяцев).
- Написать и протестировать SQL-запрос для выборки неактивных пользователей.
- Реализовать функцию удаления с фильтрацией по ролям.
- Настроить WP-Cron для регулярного запуска функции.
- Провести тестирование на тестовой среде перед внедрением в продакшен.
- Создать резервные копии перед первыми запусками.
- Добавить логирование для контроля удалений.