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

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

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

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

Ключевой критерий — дата последнего входа пользователя. WooCommerce и WordPress по умолчанию не сохраняют дату последнего входа, поэтому нужно либо использовать плагины, либо сохранять эту дату самостоятельно через хуки.

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

Чтобы хранить дату последнего входа, используйте этот код, который обновляет мета-поле last_login при каждом успешном входе:

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

Этот код нужно добавить в functions.php вашей темы или в плагин.

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

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

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

function wc_disable_inactive_users() {
    $days_inactive = 90; // период неактивности в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));

    $args = array(
        'meta_key' => 'last_login',
        'meta_value' => $date_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => -1
    );

    $user_query = new WP_User_Query($args);
    $users = $user_query->get_results();

    if (!empty($users)) {
        foreach ($users as $user_id) {
            // Установка статуса пользователя как отключенного (например, роль 'inactive')
            $user = new WP_User($user_id);
            $user->set_role('inactive');
        }
    }
}

2. Регистрируем WP-Cron задачу

add_action('wc_disable_inactive_users_hook', 'wc_disable_inactive_users');

if (!wp_next_scheduled('wc_disable_inactive_users_hook')) {
    wp_schedule_event(time(), 'daily', 'wc_disable_inactive_users_hook');
}

Этот код запускает проверку и отключение неактивных аккаунтов один раз в сутки.

3. Создаем роль inactive для отключенных пользователей

Чтобы отключить пользователя, можно создать роль без прав на вход в магазин:

function wc_add_inactive_role() {
    add_role('inactive', 'Неактивный', array(
        'read' => false, // запретить доступ к админке
    ));
}
add_action('init', 'wc_add_inactive_role');

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

  • В базе пользователей появится новая роль inactive.
  • Пользователи, которые не заходили дольше 90 дней, будут автоматически переведены в эту роль.
  • Проверьте дату последнего входа у нескольких пользователей в админке (через phpMyAdmin или кодом get_user_meta($user_id, 'last_login', true);).
  • Попробуйте войти под отключенным пользователем — вход должен быть запрещен (если вы дополнительно реализуете блокировку входа для роли inactive).

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

  • Дата последнего входа не сохраняется
    Проверьте, что хук wp_login правильно подключен и код выполняется. Для отладки добавьте error_log внутри функции.
  • WP-Cron не срабатывает
    Проверьте, что планировщик событий не отключен (константа DISABLE_WP_CRON должна быть false). Можно запустить cron вручную через WP-CLI: wp cron event run wc_disable_inactive_users_hook.
  • Пользователи с ролью inactive все еще могут войти
    Добавьте фильтр, который запрещает вход для роли inactive:
add_filter('authenticate', function($user, $username, $password) {
    if (is_a($user, 'WP_User') && in_array('inactive', $user->roles)) {
        return new WP_Error('inactive_user', __('Ваш аккаунт неактивен. Обратитесь в поддержку.'));
    }
    return $user;
}, 30, 3);
<

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

  • Регулярно очищайте базу пользователей от неактивных аккаунтов, если они не нужны, чтобы снизить нагрузку.
  • Используйте кеширование, чтобы не нагружать базу запросами к метаполям.
  • Настройте уведомления для отключенных пользователей, чтобы они могли восстановить доступ.
  • Если база пользователей большая, делайте выборки и обновления пакетами (пагинация), чтобы не превышать лимиты памяти.

Сравнение вариантов реализации автоматического отключения пользователей

МетодПлюсыМинусы
Код на WP-Cron + мета last_loginПолный контроль, без сторонних плагиновТребует разработки, настройка cron
Плагины для отслеживания last login + массовое управление ролямиБыстрая настройка, UI для админовДополнительная нагрузка, возможные конфликты
Удаление неактивных пользователей вручнуюПросто, без кодаНе автоматизировано, риск случайного удаления
Как создать собственные шорткоды в WordPress
06.11.2025
Как использовать REST API для управления пользователями в WordPress
10.12.2025
Как создать динамические таблицы в WordPress с помощью плагинов и кода
13.12.2025
Как отключить Gutenberg и вернуть классический редактор WordPress
02.02.2026
WooCommerce: автоматическое удаление товаров при отсутствии на складе
25.05.2026

Совсем скоро здесь откроется ресурс о вордпресс.