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

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

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

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

  • Заблокированные пользователи обычно имеют специальное мета-поле, например blocked или account_status с соответствующим значением.
  • Неактивные пользователи

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

1. Проверка наличия мета-поля для блокировки

Первым делом убедитесь, что у пользователей есть мета-поле, указывающее на блокировку. Например, в базе данных в таблице wp_usermeta должно присутствовать поле meta_key='blocked' с meta_value='1'.

SELECT user_id FROM wp_usermeta WHERE meta_key = 'blocked' AND meta_value = '1';

2. Поиск неактивных пользователей по дате последнего заказа

Для определения неактивных пользователей можно использовать связь с заказами WooCommerce. Таблица wp_posts содержит заказы с типом shop_order, а поле post_author — ID пользователя.

SELECT u.ID, MAX(p.post_date) AS last_order_date
FROM wp_users u
LEFT JOIN wp_posts p ON u.ID = p.post_author AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY u.ID
HAVING last_order_date < DATE_SUB(NOW(), INTERVAL 6 MONTH) OR last_order_date IS NULL;

Этот запрос вернет пользователей, у которых не было заказов за последние 6 месяцев или никогда не было.

3. Удаление пользователей по критериям

Для удаления пользователей используйте функцию WordPress wp_delete_user(), которая корректно удалит пользователя и связанные данные.

function delete_blocked_and_inactive_users() {
    global $wpdb;

    // Получаем ID заблокированных пользователей
    $blocked_user_ids = $wpdb->get_col("SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'blocked' AND meta_value = '1'");

    // Получаем ID пользователей без заказов последние 6 месяцев или без заказов вообще
    $inactive_user_ids = $wpdb->get_col(
        "SELECT u.ID FROM {$wpdb->users} u
        LEFT JOIN {$wpdb->posts} p ON u.ID = p.post_author AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
        GROUP BY u.ID
        HAVING MAX(p.post_date) < DATE_SUB(NOW(), INTERVAL 6 MONTH) OR MAX(p.post_date) IS NULL"
    );

    // Объединяем и фильтруем уникальные ID пользователей
    $user_ids_to_delete = array_unique(array_merge($blocked_user_ids, $inactive_user_ids));

    foreach ($user_ids_to_delete as $user_id) {
        wp_delete_user($user_id);
    }
}

// Запуск функции
delete_blocked_and_inactive_users();

Запустите этот код в функции темы или в плагине на время, после выполнения удалите или закомментируйте.

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

  • Через phpMyAdmin или другой инструмент базы данных проверьте, что в таблице wp_users нет заблокированных и неактивных пользователей.
  • В админке WordPress проверьте количество пользователей и убедитесь, что количество уменьшилось по сравнению с предыдущим значением.
  • Проверьте логи ошибок и журнал активности сервера на предмет ошибок при удалении.

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

  • Ошибка: Удаляются пользователи, которые должны быть активны.
    Причина: Неправильный критерий даты или мета-поля.
    Решение: Проверьте запросы в базе и значения мета-полей, уточните период неактивности.
  • Ошибка: Функция wp_delete_user() не удаляет связанные данные.
    Причина: Удаление не учитывает кастомные таблицы или метаданные плагинов.
    Решение: Добавьте дополнительные удаления для пользовательских данных плагинов.
  • Ошибка: Код вызывает нагрузку на базу данных.
    Причина: Запросы не оптимизированы или код запускается часто.
    Решение: Запускайте код вручную или через WP-CLI, разбивайте удаление на части.

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

  • Резервное копирование базы данных перед массовым удалением.
  • Используйте WP-CLI для выполнения скрипта удаления — это безопаснее и эффективнее.
  • Ограничьте удаление пользователям с ролью выше клиента (например, не трогайте администраторов).
  • Периодически проверяйте и очищайте базу данных от устаревших мета-данных пользователей.
  • Добавьте логирование удалений для аудита.

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

МетодПлюсыМинусы
Ручное удаление через админку Просто, не требует кода Трудоемко, нельзя фильтровать по активности
Использование плагинов Удобный интерфейс, фильтры Дополнительные ресурсы, возможные конфликты
Код с использованием wp_delete_user() Полный контроль, гибкость Требует навыков, возможные ошибки при некорректном коде
WooCommerce: автоматическое отслеживание и удаление товаров без наличия на складе
17.06.2026
Как отключить автообновления в WordPress на разных уровнях
01.03.2026
Запрет на вставку HTML и JavaScript в комментариях WordPress: практическое решение
20.02.2026
Как установить уникальные виджеты в WordPress для каждого шаблона
07.04.2026
Как добавить автоподсказки в поиск WordPress
31.03.2026