Как автоматизировать удаление неактивных пользователей WooCommerce

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

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

Чтобы проверить, насколько актуальна проблема на вашем сайте, выполните SQL-запрос к базе данных или воспользуйтесь плагином для анализа активности пользователей. Например, запрос для поиска пользователей без заказов и без логинов за последние 6 месяцев:

SELECT ID, user_login, user_email FROM wp_users u
LEFT JOIN wp_wc_customer_lookup c ON u.ID = c.user_id
WHERE c.user_id IS NULL
AND u.user_registered < DATE_SUB(NOW(), INTERVAL 6 MONTH);

Если число таких пользователей велико, имеет смысл автоматизировать их удаление, чтобы улучшить производительность и безопасность.

Пошаговое решение: автоматическое удаление неактивных пользователей с помощью WP-Cron и кастомного кода

Шаг 1. Создайте функцию для выборки и удаления неактивных пользователей

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpmark_delete_inactive_woocommerce_users() {
    global $wpdb;
    $interval = 180; // дней без активности
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$interval} days"));

    // Получаем пользователей без заказов и без входа в систему за последние $interval дней
    $users = $wpdb->get_results($wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
         LEFT JOIN {$wpdb->prefix}wc_customer_lookup c ON u.ID = c.user_id
         WHERE (c.user_id IS NULL OR c.last_active < %s)
         AND u.user_registered < %s",
         $date_threshold, $date_threshold
    ));

    foreach ($users as $user) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
        wp_delete_user($user->ID);
    }
}

Шаг 2. Зарегистрируйте WP-Cron задачу для регулярного запуска удаления

function wpmark_schedule_inactive_user_cleanup() {
    if (!wp_next_scheduled('wpmark_inactive_user_cleanup_event')) {
        wp_schedule_event(time(), 'daily', 'wpmark_inactive_user_cleanup_event');
    }
}
add_action('wp', 'wpmark_schedule_inactive_user_cleanup');

add_action('wpmark_inactive_user_cleanup_event', 'wpmark_delete_inactive_woocommerce_users');

Шаг 3. Разрешите гибко менять срок неактивности через фильтр

function wpmark_get_inactivity_interval() {
    return apply_filters('wpmark_inactivity_interval_days', 180);
}
// В функции удаления замените жестко заданное число на вызов этой функции:
// $interval = wpmark_get_inactivity_interval();

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

Для проверки работы решения:

  • Запустите вручную функцию wpmark_delete_inactive_woocommerce_users() через WP-CLI или php-код.
  • Проверьте в базе данных, что пользователи с датой регистрации и последней активностью более 6 месяцев удалены.
  • Мониторьте логи ошибок и активности сайта, чтобы убедиться в отсутствии сбоев.

Пример команды WP-CLI для ручного запуска:

wp eval 'wpmark_delete_inactive_woocommerce_users();'

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

  • Ошибка: Пользователи не удаляются.
    Причина: Неправильный SQL-запрос или отсутствие данных о последней активности.
    Решение: Проверьте наличие таблицы wp_wc_customer_lookup и поле last_active. Если поле отсутствует, можно заменить условие на дату последнего заказа из wp_posts с типом shop_order.
  • Ошибка: WP-Cron не запускается.
    Причина: Отсутствие трафика или отключенный WP-Cron.
    Решение: Настройте системный cron на сервере или используйте плагин для управления cron-задачами.
  • Ошибка: Удаляются активные пользователи.
    Причина: Некорректная логика проверки активности.
    Решение: Уточните критерии активности: например, проверяйте дату последнего заказа и дату последнего входа с помощью get_user_meta($user_id, 'last_login', true) (нужно заранее сохранять этот мета ключ).

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

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

Сравнение подходов: плагин vs. кастомный код vs. ручное удаление

МетодПреимуществаНедостатки
Плагин (например, WP-Optimize, Clearfy Pro)Простота настройки, дополнительные опции оптимизацииМожет нагружать сайт, не всегда точный контроль
Кастомный код (как в статье)Гибкость, точный контроль, минимальные ресурсыТребует навыков разработки, ответственность за поддержку
Ручное удаление через админкуБезопасно, только при малом числе пользователейНеподходяще для больших баз, трудоемко
Как решить проблему замедления административной панели WooCommerce при большом количестве заказов
07.06.2026
Как удалить и заблокировать спам комментарии в WordPress
11.01.2026
Как использовать хуки для автоматизации в WordPress
17.12.2025
Как удалить или изменить заголовок страницы в WordPress через фильтр
08.02.2026
Оптимизация базы данных WordPress для ускорения сайта
01.11.2025