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

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

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

Основной критерий неактивности — отсутствие покупок и входов в аккаунт на протяжении заданного времени (например, 6 месяцев). Если в WooCommerce и WordPress нет встроенного функционала для автоматической деактивации пользователей, его нужно реализовать самостоятельно или при помощи кода.

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

Для выявления неактивных клиентов необходимо проверить два параметра:

  • Дата последнего входа пользователя в систему (логин). К сожалению, по умолчанию WordPress не сохраняет дату последнего входа. Нужно добавить её через пользовательский мета-поле.
  • Дата последнего заказа WooCommerce пользователя.

Без учета даты последнего входа можно ориентироваться только на дату последнего заказа, но это не всегда точно.

Добавление мета-поля с датой последнего входа

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

function update_last_login( $login, $user ) {
    update_user_meta( $user->ID, 'last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'update_last_login', 10, 2 );

Этот хук обновит мета-поле last_login при каждом входе пользователя.

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

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

function deactivate_inactive_customers() {
    $inactive_days = 180; // Количество дней неактивности
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$inactive_days} days" ) );

    // Получаем пользователей с ролью customer
    $args = [
        'role' => 'customer',
        'meta_query' => [
            'relation' => 'OR',
            [
                'key' => 'last_login',
                'value' => $date_threshold,
                'compare' => '<',
                'type' => 'DATETIME',
            ],
            [
                'key' => 'last_login',
                'compare' => 'NOT EXISTS',
            ],
        ],
        'fields' => 'all',
        'number' => -1,
    ];
    $users = get_users( $args );

    foreach ( $users as $user ) {
        // Получаем дату последнего заказа пользователя
        $last_order_date = wc_get_customer_last_order_date( $user->ID, 'completed' );

        if ( !$last_order_date || strtotime( $last_order_date ) < strtotime( $date_threshold ) ) {
            // Пользователь неактивен, деактивируем
            update_user_meta( $user->ID, 'account_status', 'deactivated' );

            // Дополнительно можно отключить логин, заблокировав пароль
            wp_set_password( wp_generate_password(), $user->ID );
        }
    }
}

// Запускаем функцию раз в день через WP-Cron
if ( ! wp_next_scheduled( 'deactivate_inactive_customers_daily' ) ) {
    wp_schedule_event( time(), 'daily', 'deactivate_inactive_customers_daily' );
}
add_action( 'deactivate_inactive_customers_daily', 'deactivate_inactive_customers' );

В этом коде:

  • Мы получаем всех клиентов, которые не заходили больше 180 дней или у которых отсутствует запись о последнем входе.
  • Проверяем дату последнего завершённого заказа.
  • Если оба параметра показывают неактивность, меняем статус аккаунта и сбрасываем пароль, чтобы заблокировать вход.
  • Настраиваем ежедневное выполнение через WP-Cron.

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

Чтобы убедиться, что автоматическое отключение работает:

  • Вручную создайте тестовый аккаунт с ролью customer, задайте дату last_login и имитируйте отсутствие заказов.
  • Выполните функцию вручную, вызвав deactivate_inactive_customers() из консоли или временно добавив вызов в functions.php.
  • Проверьте, что у пользователя в мета-поле account_status значение deactivated.
  • Попробуйте войти под этим пользователем — пароль должен быть изменён.

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

  • Отсутствие даты последнего входа: если код для обновления last_login не добавлен, фильтр по дате не сработает. Проверьте, что хук wp_login подключён и работает.
  • Пользователи с другими ролями: функция ориентирована на роль customer. Для других ролей нужно менять параметр 'role'.
  • WP-Cron не запускается: на некоторых хостингах WP-Cron требует внешних вызовов или настройки cron-сервера. Проверьте выполнение расписания через плагин WP Crontrol.
  • Пользователи не могут восстановить доступ: обязательно настройте процесс восстановления пароля, чтобы заблокированные пользователи могли самостоятельно вернуть доступ.

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

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

Таблица сравнения вариантов реализации

МетодПлюсыМинусыПример
Код с WP-CronПолный контроль, без сторонних плагиновТребует навыков, настройка cronПример выше
Плагин для управления пользователямиПростота, интерфейсМожет нагружать сайт, не всегда гибкоНапример, User Expire
Внешний скрипт и APIМасштабируемо, можно интегрировать CRMСложнее в настройке, требует APIСвоя интеграция

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

⭐⭐⭐⭐⭐
Как автоматически удалить неиспользуемые типы постов WordPress
12.02.2026
WooCommerce: автоматическое удаление нерабочих вариантов товаров
04.06.2026
Как создать модуль автообновления плагинов в WordPress
01.04.2026
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры кода
15.01.2026
WooCommerce: как избежать проблем с кэшированием при изменениях вариантов товаров
27.07.2026
×

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

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

пишет статьи

готовит SEO

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

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