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

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

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

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

Критерии могут меняться в зависимости от специфики магазина, но обычно это пользователи с ролью customer, у которых не было заказов или логинов в течение длительного времени (например, 6 месяцев и более).

  • Роль пользователя: customer
  • Отсутствие заказов за последние 6 месяцев
  • Отсутствие активности (вход на сайт) за последние 6 месяцев (если есть запись в метаданных)

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

Для автоматизации процесса можно использовать WP-Cron. Ниже пример кода для functions.php или собственного плагина.

<?php
// Шаг 1: Регистрируем событие, если оно ещё не добавлено
function wpdocs_schedule_delete_inactive_customers() {
    if ( ! wp_next_scheduled( 'delete_inactive_customers_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'delete_inactive_customers_hook' );
    }
}
add_action( 'wp', 'wpdocs_schedule_delete_inactive_customers' );

// Шаг 2: Обработчик удаления
function wpdocs_delete_inactive_customers() {
    global $wpdb;

    $six_months_ago = date( 'Y-m-d H:i:s', strtotime( '-6 months' ) );

    // Получаем ID пользователей с ролью customer
    $customer_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->users} WHERE ID IN (
        SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = '{$wpdb->prefix}capabilities' AND meta_value LIKE '%customer%'
    )" );

    foreach ( $customer_ids as $user_id ) {
        // Проверяем заказы пользователя
        $orders = wc_get_orders( array(
            'customer_id' => $user_id,
            'limit' => 1,
            'orderby' => 'date',
            'order' => 'DESC',
            'date_created' => '>=' . $six_months_ago
        ) );

        if ( empty( $orders ) ) {
            // Дополнительно можно проверить последний логин, если у вас есть мета с датой
            // Например, meta_key = 'last_login'
            $last_login = get_user_meta( $user_id, 'last_login', true );
            if ( $last_login && strtotime( $last_login ) < strtotime( $six_months_ago ) ) {
                wp_delete_user( $user_id );
            } elseif ( ! $last_login ) {
                // Если нет данных по логину, удаляем по отсутствию заказов
                wp_delete_user( $user_id );
            }
        }
    }
}
add_action( 'delete_inactive_customers_hook', 'wpdocs_delete_inactive_customers' );

// Шаг 3: Для сбора данных о последнем входе можно использовать плагин или добавить код, например:
function wpdocs_track_last_login( $login, $user ) {
    update_user_meta( $user->ID, 'last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'wpdocs_track_last_login', 10, 2 );
?>

Объяснение кода

  • Регистрация WP-Cron задачи на ежедневное выполнение.
  • В функции удаления получаем пользователей с ролью customer.
  • Проверяем заказы за последние 6 месяцев с помощью wc_get_orders.
  • Дополнительно проверяем дату последнего входа, если она есть.
  • Удаляем пользователя через wp_delete_user.
  • Отдельный хук для записи даты последнего входа.

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

  • Вручную выполните функцию wpdocs_delete_inactive_customers() через WP CLI или временно вызовите ее в админке.
  • Проверьте, что пользователи с отсутствием заказов и логинов за 6 месяцев удалены.
  • Отслеживайте логи ошибок PHP и WP-Cron для подтверждения успешного запуска задачи.
  • Используйте SQL-запросы для проверки количества клиентов до и после запуска скрипта.

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

  • Неправильная роль пользователя. Убедитесь, что роль действительно customer, иногда могут быть кастомные роли.
  • Отсутствие даты последнего входа. Если не отслеживать логины, часть пользователей может не удаляться. Добавьте хук для записи последнего входа.
  • Отсутствие прав у WP-Cron. Проверьте, что задача запускалась — для этого используйте плагин WP Crontrol.
  • Неправильный формат даты или часовой пояс. Используйте current_time('mysql') и стандартные функции WordPress для даты.
  • Удаление админов или других ролей. В коде фильтруйте только нужные роли.

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

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

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

МетодПлюсыМинусыКомпромисс
Код в functions.php + WP-CronГибкость, без плагинов, полный контрольТребует навыков, возможны ошибки при большом объемеУдалять небольшими партиями, логировать
Плагины очистки базы (например, Clearfy Pro)Удобный интерфейс, дополнительные функции оптимизацииМогут быть платными, ограниченная кастомизацияИспользовать для разовых очисток, а не для постоянной автоматизации
Ручное удаление через админкуПростота, безопасностьТрудозатратно, не подходит для больших базИспользовать для мелких магазинов или непериодически

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

⭐⭐⭐⭐⭐
WooCommerce: как использовать WP-Cron для автоматического изменения стоимости товаров
12.06.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях через хуки
15.06.2026
Как автоматически удалить неиспользуемые типы постов WordPress
12.02.2026
Установка и настройка WPRemark для автоматического комментирования в WordPress
05.04.2026
Как создать плагин для автоматического сохранения changelogов в WordPress
30.11.2025
×

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

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

пишет статьи

готовит SEO

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

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