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

Диагностика проблемы с базой клиентов WooCommerce

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

Чтобы проверить, насколько актуальна база клиентов, выполните SQL-запрос для подсчёта пользователей без заказов:

SELECT COUNT(DISTINCT u.ID) AS inactive_users_count
FROM wp_users u
LEFT JOIN wp_wc_customer_lookup cl ON u.ID = cl.user_id
WHERE cl.user_id IS NULL;

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

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

1. Определяем критерии неактивности

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

2. Создаём кастомную функцию для удаления пользователей

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

function wc_delete_inactive_customers() {
    global $wpdb;
    $one_year_ago = date('Y-m-d H:i:s', strtotime('-1 year'));

    // Получаем ID пользователей без заказов и с датой последнего входа более года назад
    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
         LEFT JOIN wp_wc_customer_lookup cl ON u.ID = cl.user_id
         LEFT JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = 'last_login'
         WHERE cl.user_id IS NULL
         AND (um.meta_value IS NULL OR um.meta_value < %s)",
        $one_year_ago
    ));

    if (empty($user_ids)) {
        return 'No inactive users found';
    }

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

    return count($user_ids) . ' inactive users deleted';
}

Обратите внимание, что для хранения времени последнего входа нужен плагин или кастомный код, который записывает last_login в usermeta. Если такого нет, критерий по дате последнего входа можно убрать.

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

Добавьте задачу, которая будет запускать удаление раз в месяц:

if (!wp_next_scheduled('wc_delete_inactive_customers_cron')) {
    wp_schedule_event(time(), 'monthly', 'wc_delete_inactive_customers_cron');
}

add_action('wc_delete_inactive_customers_cron', 'wc_delete_inactive_customers');

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

  • Зайдите в админку WordPress → Пользователи и проверьте количество клиентов.
  • Выполните SQL-запрос из раздела диагностики до и после запуска функции.
  • Для теста запустите функцию вручную, вызвав wc_delete_inactive_customers(); через консоль WP-CLI или подключив вызов на страницу с админским доступом.

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

  • Ошибка: Нельзя удалить пользователя, если он авторизован или есть связанные данные.
    Решение: Убедитесь, что wp_delete_user() вызывается корректно и нет зависимостей (заказы, права).
  • Ошибка: Нет записи last_login в usermeta.
    Решение: Либо добавьте плагин для отслеживания логинов, либо уберите проверку даты из условия.
  • Ошибка: WP-Cron не срабатывает.
    Решение: Проверьте, что на сервере посещения сайта есть, либо настройте системный cron для wp-cron.php.

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

  • Перед удалением пользователей сделайте полный бэкап базы данных.
  • Удаляйте только пользователей без заказов, чтобы не потерять критичные данные.
  • Для больших баз используйте пакетную обработку, чтобы избежать таймаутов. Например, обрабатывать по 100 пользователей за раз.
  • Для записи даты последнего входа используйте проверенный плагин, например WP Last Login.

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

МетодПлюсыМинусыКогда использовать
Ручное удаление через админку Простота, контроль Трудозатратно, долго Малое количество неактивных пользователей
Кастомный код с WP-Cron Автоматизация, масштабируемость Требует навыков программирования, настройка расписания Средние и большие магазины
Плагины очистки базы (например, Clearfy Pro) Широкие возможности оптимизации Может быть избыточно, платные версии Комплексная оптимизация сайта

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

⭐⭐⭐⭐⭐
Как автоматизировать обновление transient в WordPress: практическое руководство
15.03.2026
Создаем комплексное решение для удаления спама в комментариях WordPress
03.01.2026
Автоматическое удаление устаревших данных через Transient API в WordPress
22.03.2026
Как автоматизировать создание и обновление Sitemap в WordPress
18.01.2026
Как создать собственный шорткод в WordPress: подробное руководство
05.11.2025
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше