Диагностика проблемы: зачем удалять неактивных пользователей WooCommerce
В интернет-магазинах на WooCommerce со временем накапливается множество пользователей, которые зарегистрировались, но не совершили покупок и не проявляли активности. Это увеличивает размер базы данных, замедляет работу сайта и затрудняет маркетинговые кампании. Регулярное удаление таких пользователей помогает оптимизировать производительность и поддерживать актуальность базы.
Как определить неактивных пользователей WooCommerce
Под неактивными пользователями будем понимать тех, у кого:
- нет ни одного оплаченного заказа;
- дата последнего входа в систему отсутствует или давно;
- зарегистрировались более 6 месяцев назад (настраиваемый параметр).
Чтобы получить дату последнего входа пользователя, можно использовать мета-данные пользователя. Если этот параметр не отслеживается, его нужно добавить программно.
Добавление мета-данных даты последнего входа
В functions.php вашей темы или в кастомном плагине добавьте следующий код:
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'));
}Этот код сохраняет дату и время последнего входа пользователя в мета-ключ last_login.
Пошаговое решение: удаление неактивных пользователей
1. Определяем пользователей без оплаченных заказов и с датой последнего входа более 6 месяцев назад.
2. Удаляем таких пользователей из базы WordPress.
Пример кода для удаления неактивных пользователей
function delete_inactive_woocommerce_users($months = 6) {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$months} months"));
// Получаем ID пользователей без оплаченных заказов
$user_ids = $wpdb->get_col(
"SELECT u.ID FROM {$wpdb->users} u
LEFT JOIN {$wpdb->prefix}wc_orders o ON u.ID = o.customer_id AND o.status = 'completed'
WHERE o.customer_id IS NULL"
);
if (empty($user_ids)) {
return 'Нет пользователей без оплаченных заказов';
}
$deleted = 0;
foreach ($user_ids as $user_id) {
$last_login = get_user_meta($user_id, 'last_login', true);
$registered = get_userdata($user_id)->user_registered;
// Проверяем дату последнего входа или дату регистрации
$last_active_date = $last_login ? $last_login : $registered;
if ($last_active_date < $date_threshold) {
require_once(ABSPATH.'wp-admin/includes/user.php');
wp_delete_user($user_id);
$deleted++;
}
}
return "Удалено пользователей: $deleted";
}
// Вызов функции (например, с админки или WP-CLI)
echo delete_inactive_woocommerce_users(6);Важно: функция удаляет пользователей без возможности восстановления, используйте с осторожностью и делайте резервные копии.
Проверка результата после внедрения
- Через phpMyAdmin или админку WordPress проверьте, что количество пользователей уменьшилось.
- Проверьте наличие пользователей без заказов и дату последнего входа (если есть).
- Для дополнительной проверки запустите функцию с логированием удаляемых ID пользователей.
Частые ошибки и их исправление
- Отсутствие мета last_login: без сохранения даты входа скрипт может удалять пользователей, которые просто не заходили, но покупали. Решение — добавить код для обновления last_login.
- Неправильные статусы заказов: в WooCommerce статусы заказов могут отличаться (например, "processing", "completed"), убедитесь, что в запросе учитывается именно оплаченный статус (
completedилиprocessing). - Удаление администраторов и ключевых пользователей: скрипт не фильтрует роли. Добавьте проверку, чтобы не удалять пользователей с ролью администратора или других важных ролей.
Практические советы по безопасности и производительности
- Запускайте удаление пользователей в периоды минимальной активности сайта.
- Используйте WP-CLI для выполнения массовых операций, чтобы избежать таймаутов.
- Добавьте фильтры для исключения определённых ролей и пользователей из удаления.
- Регулярно делайте резервные копии базы перед массовыми удалениями.
- Оптимизируйте базу данных после удаления пользователей с помощью плагинов типа Clearfy Pro или вручную через SQL.
Сравнение способов удаления неактивных пользователей WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Ручное удаление в админке | Удаление по одному из раздела "Пользователи" | Простота, контроль | Трудозатратно, не подходит для сотен пользователей |
| Плагин (например, WP Bulk Delete) | Автоматизация удаления по условиям | Удобно, есть фильтры | Зависимость от стороннего кода, нагрузка на сайт |
| Кодовое решение (как в статье) | Полный контроль, кастомизация | Гибкость, интеграция с бизнес-логикой | Требует навыков, риск ошибок без тестирования |