wplinks.ru wordpress WPLinks.ru

Автоматическое отключение неактивных пользователей WooCommerce

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

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

Определение критериев неактивности пользователей WooCommerce

Для автоматизации отключения нужно четко понимать, кто считается неактивным. Обычно берут за критерий:

  • Отсутствие входа в аккаунт (последний логин) более N месяцев
  • Отсутствие заказов за последние N месяцев

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

Как добавить отслеживание времени последнего входа пользователя

Для отслеживания последнего логина добавим код в functions.php темы или в отдельный плагин:

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

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

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

Ниже пример кода, который отключает (устанавливает статус пользователя wp_user_status = 1) пользователей, у которых не было входа и заказов более 6 месяцев:

function disable_inactive_woocommerce_users() {    $cutoff_timestamp = strtotime('-6 months');    $args = array(        'role' => 'customer',        'meta_query' => array(            'relation' => 'OR',            array(                'key' => 'last_login',                'value' => $cutoff_timestamp,                'compare' => '<',                'type' => 'NUMERIC',            ),            array(                'key' => 'last_login',                'compare' => 'NOT EXISTS',            ),        ),        'fields' => 'ID',        'number' => -1,    );    $user_query = new WP_User_Query($args);    if (!empty($user_query->results)) {        foreach ($user_query->results as $user_id) {            $orders = wc_get_orders(array(                'customer_id' => $user_id,                'date_created' => '>' . date('Y-m-d H:i:s', $cutoff_timestamp),                'limit' => 1,            ));            if (empty($orders)) {                wp_update_user(array(                    'ID' => $user_id,                    'user_status' => 1, // Отключить пользователя                ));            }        }    }}

Рекомендуется запускать эту функцию через WP-Cron, например, раз в неделю:

if (!wp_next_scheduled('disable_inactive_users_cron')) {    wp_schedule_event(time(), 'weekly', 'disable_inactive_users_cron');}add_action('disable_inactive_users_cron', 'disable_inactive_woocommerce_users');

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

  • Зайдите в админку WordPress → Пользователи и отфильтруйте пользователей по статусу. Пользователи с user_status = 1 считаются отключенными.
  • Попробуйте войти под одним из отключенных пользователей — вход должен быть запрещён.
  • Проверьте базу данных в таблице wp_users, поле user_status изменено на 1.

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

  • Отсутствует информация о последнем входе: если не добавлен код для записи last_login, скрипт будет отключать всех пользователей без этого поля. Решение — добавить код из раздела выше.
  • Неправильный ролевая фильтрация: в WooCommerce роль покупателя может быть не только customer, проверьте актуальные роли на вашем сайте.
  • Ошибка в запросе заказов: использование wc_get_orders требует WooCommerce 3.0+. Убедитесь, что версия плагина актуальна.
  • Функция запускается слишком часто: WP-Cron может запускаться при каждом посещении сайта, что приведёт к нагрузке. Настройте реальный серверный cron или увеличьте период запуска.

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

  • Перед массовым отключением сделайте резервную копию базы данных.
  • Используйте транзакции и проверяйте нагрузку при работе с большими базами.
  • Добавьте уведомление в админку о количестве отключенных пользователей для контроля.
  • Для больших магазинов с тысячами пользователей используйте пагинацию в WP_User_Query с параметром number и offset.

Сравнение способов реализации

Метод Плюсы Минусы
Кастомный код с WP_User_Query и wc_get_orders Гибкость, полный контроль, без сторонних плагинов Требует навыков, нужно тестировать, нагрузка на БД
Плагины для управления пользователями (например, WP Bulk Delete) Простота использования, готовые интерфейсы Могут быть тяжелыми, ограниченная кастомизация
SQL-запросы напрямую в базе Быстродействие, точечное управление Риск ошибок, сложность поддержки, отсутствие логики WooCommerce
×

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

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

пишет статьи

готовит SEO

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

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