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

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

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

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

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

  • Дата последнего входа (last_login) более 6 месяцев назад или отсутствует;
  • Отсутствие заказов (orders_count = 0);
  • Роль пользователя — «customer» (чтобы не удалять администраторов и редакторов).

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

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

Добавим в functions.php следующий код, который при каждом входе пользователя будет обновлять мета-поле 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('timestamp'));
}

Этот код фиксирует время входа в формате timestamp WordPress.

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

Теперь можно написать функцию, которая выберет и удалит пользователей с ролью customer, у которых:

  • нет заказов в WooCommerce;
  • последний вход был более 6 месяцев назад (или отсутствует).

Пример кода для удаления таких пользователей:

function delete_inactive_customers() {
    $six_months_ago = strtotime('-6 months');

    // WP_User_Query для пользователей с ролью customer
    $args = [
        'role' => 'customer',
        'meta_query' => [
            'relation' => 'OR',
            [
                'key' => 'last_login',
                'value' => $six_months_ago,
                'compare' => '<',
                'type' => 'NUMERIC',
            ],
            [
                'key' => 'last_login',
                'compare' => 'NOT EXISTS',
            ],
        ],
        'fields' => 'ID',
        'number' => -1,
    ];

    $users = get_users($args);

    foreach ($users as $user_id) {
        // Проверяем, есть ли у пользователя заказы
        $orders = wc_get_orders([
            'customer_id' => $user_id,
            'limit' => 1,
            'return' => 'ids',
        ]);

        if (empty($orders)) {
            wp_delete_user($user_id);
        }
    }
}

// Можно запускать вручную или через WP-CLI
// delete_inactive_customers();

Как запустить удаление безопасно

Рекомендуется запускать функцию из консоли WP-CLI или через временный admin-скрипт, чтобы избежать таймаута и случайного удаления:

  • Создайте файл delete-inactive-customers.php в корне темы с вызовом функции;
  • Откройте этот файл через браузер, убедитесь, что удаления прошли;
  • Удалите файл после выполнения.

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

Чтобы проверить, что функция отработала корректно:

  • Посмотрите в админке WordPress → Пользователи, количество клиентов должно уменьшиться;
  • В базе данных в таблице wp_usermeta не должно остаться пользователей с ролью customer без заказов и с устаревшим last_login;
  • Для дополнительной проверки можно вывести список удаляемых ID перед удалением через error_log или на экран.

Частые ошибки и как их избежать

  • Отсутствие мета-поля last_login: без этого поля нельзя определить активность, поэтому сначала убедитесь, что код обновления даты входа работает.
  • Удаление пользователей с заказами: проверьте, что запрос к wc_get_orders корректный и возвращает заказы, иначе есть риск удалить активных клиентов.
  • Таймаут при большом количестве пользователей: выполняйте скрипт по частям или через WP-CLI.
  • Удаление администраторов: убедитесь, что фильтрация по роли работает правильно.

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

  • Перед удалением сделайте полный бэкап базы данных.
  • Выполняйте удаление в часы минимальной нагрузки на сайт.
  • Периодически очищайте базу от неактивных пользователей, чтобы поддерживать скорость запросов.
  • Используйте WP-CLI для пакетной обработки, чтобы избежать проблем с ограничением времени выполнения PHP.

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

МетодПлюсыМинусыКомпромисс
Удаление через плагины (например, User Cleanup)Удобный интерфейс, настройки без кодаДополнительная нагрузка, возможные конфликтыИспользовать для небольших сайтов
Кастомный код (пример выше)Гибкость, контроль, без лишних плагиновТребует навыков, риск ошибок без тестовИспользовать с бэкапом и тестированием
Удаление вручную из базы данныхМаксимальный контрольВысокий риск, сложностьТолько для опытных и с бэкапом
Как установить уникальные метаданные для страниц WordPress
17.12.2025
Оптимизация базы данных WordPress: лучшие методы и примеры
21.11.2025
Как установить уникальные идентификаторы для заказов WooCommerce
11.06.2026
Как удалить старые transient данные в WordPress без плагинов
11.03.2026
Как создать динамическую картинку из шорткода в WordPress с примером кода
01.02.2026