Как автоматизировать удаление неактивных пользователей WooCommerce

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

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

Критерии определения неактивных пользователей WooCommerce

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

  • Дата последнего входа (login) пользователя;
  • Дата последнего заказа (если пользователь не совершал покупок – считается неактивным);
  • Статус пользователя (например, исключить администраторов, менеджеров магазина);
  • Проверка подписок и членств (если используются дополнительные плагины).

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

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

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

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

Это сохранит дату и время последнего входа в метаполе last_login.

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

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

2. Удалите таких пользователей программно.

3. Запустите эту функцию периодически через WP-Cron или вручную.

Пример кода функции удаления пользователей, неактивных более 180 дней:

function wpmark_delete_inactive_users() { $days_inactive = 180; $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days')); $args = array( 'role__not_in' => array('administrator', 'shop_manager'), 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'last_login', 'value' => $date_threshold, 'compare' => '<', 'type' => 'DATETIME' ), array( 'key' => 'last_login', 'compare' => 'NOT EXISTS' ), ), 'fields' => 'ID' ); $user_query = new WP_User_Query($args); $user_ids = $user_query->get_results(); if (empty($user_ids)) { return; } foreach ($user_ids as $user_id) { $orders = wc_get_orders(array( 'customer' => $user_id, 'limit' => 1 )); if (empty($orders)) { require_once(ABSPATH.'wp-admin/includes/user.php'); wp_delete_user($user_id); } } }

Для автоматического запуска добавьте в functions.php следующее:

if (!wp_next_scheduled('wpmark_daily_user_cleanup')) { wp_schedule_event(time(), 'daily', 'wpmark_daily_user_cleanup'); } add_action('wpmark_daily_user_cleanup', 'wpmark_delete_inactive_users');

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

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

  • Вручную вызовите функцию wpmark_delete_inactive_users() через wp shell или временно добавьте вызов в functions.php и обновите любую страницу;
  • Проверьте в базе данных таблицу wp_users, что пользователи, не заходившие более 180 дней и без заказов, удалены;
  • Посмотрите логи ошибок сервера на наличие ошибок при удалении;
  • Отключите функцию после теста, чтобы избежать двойного удаления.

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

  • Пользователи не удаляются, хотя должны: Проверьте правильность даты в метаполе last_login. Если дата не сохраняется, значит хук wp_login не срабатывает. Убедитесь, что код добавлен и активен.
  • Удаляются администраторы или менеджеры: Проверьте параметр role__not_in в запросе. Роли должны точно совпадать с теми, что используются на сайте.
  • Ошибки при вызове wp_delete_user(): Добавьте подключение require_once(ABSPATH.'wp-admin/includes/user.php'); перед вызовом функции.
  • Функция не запускается автоматически: Проверьте, что WP-Cron работает (не отключен) и нет конфликтов с плагинами кэширования. Для проверки можно использовать плагин WP Crontrol.

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

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

Сравнение методов удаления неактивных пользователей WooCommerce

МетодПреимуществаНедостаткиКомпромисс
Ручное удаление через админкуПростота, контрольЗатратно по времени, риск ошибкиПодходит для малых сайтов
Плагин очистки пользователейУдобство, автоматизацияЗависимость от стороннего кода, нагрузкаИспользовать проверенные плагины
Кастомный код с WP-Cron (описанный метод)Гибкость, полный контрольТребует навыков, настройкаЛучший выбор для опытных разработчиков
Как создать и использовать собственные пост типы в WordPress
17.11.2025
Как избежать проблем с производительностью при массовом импорте товаров в WooCommerce
07.05.2026
Отложенная публикация постов в WordPress: настройка и примеры
09.03.2026
Как автоматизировать удаление неактивных пользователей WooCommerce
24.07.2026
Как автоматизировать удаление старого контента в WooCommerce
11.05.2026