WooCommerce: как автоматически удалять неактивных клиентов

Диагностика проблемы: зачем удалять неактивных клиентов в WooCommerce

В крупных интернет-магазинах на WooCommerce база клиентов со временем разрастается, включая множество неактивных пользователей, которые давно не заходили и не делали покупки. Это приводит к увеличению нагрузки на базу данных, замедлению запросов и затруднению аналитики. Удаление таких клиентов помогает оптимизировать базу, снизить нагрузку на сервер и повысить качество данных.

Как определить неактивного клиента?

Основной критерий — время последнего входа на сайт. WooCommerce по умолчанию не хранит дату последнего логина, но можно использовать плагин или добавить мета-поле пользователя, чтобы фиксировать дату последнего входа.

Пошаговое решение: автоматическое удаление неактивных клиентов по дате последнего входа

1. Добавляем запись последнего входа пользователя

В functions.php темы добавим код, который обновляет мета-поле last_login при каждом входе:

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'));
}

2. Создаем функцию для удаления неактивных клиентов

Добавим функцию, которая находит пользователей WooCommerce (роль 'customer'), у которых last_login старше нужного периода, и удаляет их.

function delete_inactive_customers($days = 180) {
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    
    $args = [
        'role' => 'customer',
        'meta_query' => [
            [
                'key' => 'last_login',
                'value' => $date_threshold,
                'compare' => '<',
                'type' => 'DATETIME',
            ],
        ],
        'fields' => 'ID',
        'number' => -1,
    ];
    
    $user_query = new WP_User_Query($args);
    $user_ids = $user_query->get_results();

    if (!empty($user_ids)) {
        foreach ($user_ids as $user_id) {
            wp_delete_user($user_id);
        }
    }
}

3. Автоматизируем запуск через WP-Cron

Регистрируем ежедневное событие и привязываем к нему удаление неактивных клиентов:

if (!wp_next_scheduled('daily_delete_inactive_customers')) {
    wp_schedule_event(time(), 'daily', 'daily_delete_inactive_customers');
}

add_action('daily_delete_inactive_customers', function() {
    delete_inactive_customers(180); // 180 дней неактивности
});

Проверка результата после внедрения

  • В базе данных в таблице wp_usermeta у пользователей есть мета last_login с актуальной датой.
  • После запуска cron (можно вызвать вручную через do_action('daily_delete_inactive_customers')) неактивные пользователи старше 180 дней удаляются.
  • Проверить удаление можно через админку WordPress в разделе пользователи или с помощью запроса к базе.

Частые ошибки и как их исправить

  • Отсутствие мета last_login: если мета не создается, удаление ничего не найдет. Проверьте, подключен ли код обновления даты входа и что хук wp_login работает.
  • Удаляются не те пользователи: убедитесь, что роль указана правильно — customer для WooCommerce клиентов.
  • Проблемы с WP-Cron: если cron не срабатывает, можно запускать вручную или настроить системный cron для вызова wp-cron.php.
  • Удаление не происходит из-за прав: скрипту нужны права администратора для удаления пользователей.

Практические советы по безопасности и производительности

  • Перед удалением всегда делайте резервную копию базы данных.
  • Если база очень большая, разбивайте удаление на порции по 100-200 пользователей, чтобы избежать таймаутов.
  • Для большей безопасности можно сначала не удалять пользователей, а отмечать их в отдельном мета-поле, а затем удалять по подтверждению.
  • Добавьте логирование удалений в отдельный файл или системный лог для контроля.

Сравнение способов удаления неактивных клиентов

МетодОписаниеПлюсыМинусы
ПлагинИспользование готового плагина для очистки пользователейПростота, UI для управленияЗависимость от стороннего кода, нагрузка
Код в functions.phpКастомное решение на основе WP-CronГибкость, контроль, минимальная нагрузкаТребует навыков, нужно тестировать
Ручное удалениеАдминка или SQL-запросыПростота для небольшой базыНеавтоматично, риск ошибок

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: автоматическое отключение неиспользуемых плагинов для оптимизации магазина
07.07.2026
Как удалить версию из URL JS и CSS в WordPress без потери кеширования
06.01.2026
WooCommerce: как автоматически удалять неактивных клиентов
17.07.2026
Как использовать хуки для динамического изменения заголовков страниц WordPress
23.03.2026
Создаем собственный виджет WordPress с применением классов и примерами кода
21.11.2025
×
Обнови свой WordPress!

Держи скидку 15% на премиум тему Reboot

Купить со скидкой ⋙