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

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

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

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

Под неактивными пользователями будем понимать тех, у кого:

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

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

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

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

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'));
}

Этот код сохраняет дату и время последнего входа пользователя в мета-ключ last_login.

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

1. Определяем пользователей без оплаченных заказов и с датой последнего входа более 6 месяцев назад.
2. Удаляем таких пользователей из базы WordPress.

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

function delete_inactive_woocommerce_users($months = 6) {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$months} months"));

    // Получаем ID пользователей без оплаченных заказов
    $user_ids = $wpdb->get_col(
        "SELECT u.ID FROM {$wpdb->users} u
        LEFT JOIN {$wpdb->prefix}wc_orders o ON u.ID = o.customer_id AND o.status = 'completed'
        WHERE o.customer_id IS NULL"
    );

    if (empty($user_ids)) {
        return 'Нет пользователей без оплаченных заказов';
    }

    $deleted = 0;
    foreach ($user_ids as $user_id) {
        $last_login = get_user_meta($user_id, 'last_login', true);
        $registered = get_userdata($user_id)->user_registered;

        // Проверяем дату последнего входа или дату регистрации
        $last_active_date = $last_login ? $last_login : $registered;

        if ($last_active_date < $date_threshold) {
            require_once(ABSPATH.'wp-admin/includes/user.php');
            wp_delete_user($user_id);
            $deleted++;
        }
    }

    return "Удалено пользователей: $deleted";
}

// Вызов функции (например, с админки или WP-CLI)
echo delete_inactive_woocommerce_users(6);

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

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

  • Через phpMyAdmin или админку WordPress проверьте, что количество пользователей уменьшилось.
  • Проверьте наличие пользователей без заказов и дату последнего входа (если есть).
  • Для дополнительной проверки запустите функцию с логированием удаляемых ID пользователей.

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

  • Отсутствие мета last_login: без сохранения даты входа скрипт может удалять пользователей, которые просто не заходили, но покупали. Решение — добавить код для обновления last_login.
  • Неправильные статусы заказов: в WooCommerce статусы заказов могут отличаться (например, "processing", "completed"), убедитесь, что в запросе учитывается именно оплаченный статус (completed или processing).
  • Удаление администраторов и ключевых пользователей: скрипт не фильтрует роли. Добавьте проверку, чтобы не удалять пользователей с ролью администратора или других важных ролей.

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

  • Запускайте удаление пользователей в периоды минимальной активности сайта.
  • Используйте WP-CLI для выполнения массовых операций, чтобы избежать таймаутов.
  • Добавьте фильтры для исключения определённых ролей и пользователей из удаления.
  • Регулярно делайте резервные копии базы перед массовыми удалениями.
  • Оптимизируйте базу данных после удаления пользователей с помощью плагинов типа Clearfy Pro или вручную через SQL.

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

МетодОписаниеПлюсыМинусы
Ручное удаление в админкеУдаление по одному из раздела "Пользователи"Простота, контрольТрудозатратно, не подходит для сотен пользователей
Плагин (например, WP Bulk Delete)Автоматизация удаления по условиямУдобно, есть фильтрыЗависимость от стороннего кода, нагрузка на сайт
Кодовое решение (как в статье)Полный контроль, кастомизацияГибкость, интеграция с бизнес-логикойТребует навыков, риск ошибок без тестирования
Как создать динамическое меню в WordPress с применением wp_nav_menu и кастомных walker-классов
18.12.2025
Как удалить неактивных пользователей WooCommerce с помощью кода
03.05.2026
Как автоматически создавать контент на основе GPT в WordPress
07.01.2026
Как отследить и удалить нерабочие ссылки в WooCommerce
20.04.2026
Как автоматически удалять неактивные вариации товаров в WooCommerce с помощью кода
07.05.2026