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

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

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

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

Неактивными считаются пользователи, которые зарегистрированы, но за последний год (или иной период) не совершали заказов и не заходили на сайт. Для диагностики можно использовать SQL-запросы или плагины для анализа активности.

SELECT u.ID, u.user_login, MAX(o.post_date) AS last_order_date FROM wp_users u LEFT JOIN wp_posts o ON u.ID = o.post_author AND o.post_type = 'shop_order' AND o.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 1 YEAR);

Этот запрос покажет пользователей без заказов за последний год или без заказов вовсе.

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

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

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

function wc_delete_inactive_customers() {
    global $wpdb;
    // Получаем пользователей без заказов за последний год
    $one_year_ago = date('Y-m-d H:i:s', strtotime('-1 year'));
    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
         LEFT JOIN {$wpdb->posts} p ON u.ID = p.post_author 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) < %s",
        $one_year_ago
    ));

    if (empty($user_ids)) {
        return;
    }

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

2. Регистрируем WP-Cron событие

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

function wc_schedule_delete_inactive_customers() {
    if (!wp_next_scheduled('wc_daily_delete_inactive_customers')) {
        wp_schedule_event(time(), 'daily', 'wc_daily_delete_inactive_customers');
    }
}
add_action('wp', 'wc_schedule_delete_inactive_customers');
add_action('wc_daily_delete_inactive_customers', 'wc_delete_inactive_customers');

Как проверить, что удаление работает

  • Запустите функцию вручную из консоли WP-CLI или добавьте временный вызов wc_delete_inactive_customers() в functions.php и проверьте удаление пользователей.
  • Проверьте наличие запланированного события WP-Cron через плагин "WP Crontrol" или команду WP-CLI wp cron event list.
  • Перед и после запуска сделайте экспорт списка пользователей для сравнения.

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

  • Удаляются активные пользователи: проверьте логику SQL-запроса, чтобы правильно учитывать статусы заказов и дату последнего заказа.
  • WP-Cron не срабатывает: убедитесь, что на сайте есть посещения или настройте системный cron для вызова wp-cron.php.
  • Ошибка прав при удалении пользователей: функция wp_delete_user() требует достаточных прав. Запускайте код с администраторскими правами.

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

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

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

МетодПлюсыМинусыПример
WP-Cron + кодГибкость, без сторонних плагинов, полный контрольТребует навыков, WP-Cron может не сработать без трафикаПример из статьи выше
Плагин очистки базыПростота установки, готовый функционалМожет быть избыточным, не всегда точный контрольWP-Sweep (https://wordpress.org/plugins/wp-sweep/)
SQL-запросы вручнуюБыстро и эффективно при больших данныхРиск ошибок, требует бэкапа, нет автоматизацииSQL-запрос из раздела диагностики

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

⭐⭐⭐⭐⭐
Как автоматизировать удаление устаревших мета данных в WordPress
12.04.2026
Как автоматизировать управление ролями в WordPress с помощью кода
16.02.2026
Как автоматизировать сборку и оптимизацию картинок в WordPress
19.12.2025
Как удалить или изменить мета-тег robots в WordPress без плагинов
28.12.2025
Как создать автоматическое отправление email в WordPress с примерами кода
11.01.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙