wpmoney.ru wordpress WP Money

Как удалить заблокированные или удалённые пользователи из базы WordPress без плагинов

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

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

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

Используйте следующий SQL-запрос через phpMyAdmin или любой другой SQL-клиент, подключенный к вашей базе WordPress:

SELECT ID, user_login, user_email, user_status FROM wp_users WHERE user_status != 0;

В WordPress поле user_status может использоваться для обозначения блокировки пользователя (например, 1 — заблокирован). Если вы используете кастомные решения, проверьте метаданные пользователей в таблице wp_usermeta:

SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE meta_key LIKE '%blocked%' OR meta_key LIKE '%deleted%';

Такие проверки помогут выявить пользователей, которые неактивны, но ещё числятся в базе.

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

Для удаления пользователей без плагинов рекомендуется использовать WP CLI или написать кастомный PHP-скрипт с безопасной логикой. Ниже пример функции, которая удаляет пользователей с user_status равным 1 (заблокированные) и дополнительно проверяет метаданные.

function delete_blocked_users() {
    global $wpdb;

    // Получаем ID пользователей с user_status = 1
    $blocked_user_ids = $wpdb->get_col("SELECT ID FROM {$wpdb->users} WHERE user_status = 1");

    if (empty($blocked_user_ids)) {
        return 'Нет заблокированных пользователей для удаления';
    }

    foreach ($blocked_user_ids as $user_id) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
        wp_delete_user($user_id);
    }

    return count($blocked_user_ids) . ' заблокированных пользователей удалено.';
}

// Вызов функции в безопасном контексте
add_action('admin_init', function() {
    if ( current_user_can('manage_options') && isset($_GET['delete_blocked_users']) ) {
        echo delete_blocked_users();
        exit;
    }
});

Чтобы запустить удаление, перейдите в админку с параметром ?delete_blocked_users=1. После запуска функция удалит всех заблокированных пользователей.

Удаление пользователей по метаданным

Если пользователи блокируются через мета-поля, нужно сначала получить их ID, а затем удалить:

$blocked_by_meta = $wpdb->get_col(
    "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'is_blocked' AND meta_value = '1'"
);
foreach ($blocked_by_meta as $user_id) {
    wp_delete_user($user_id);
}

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

После выполнения удаления пользователей проверьте базу данных повторным SQL-запросом:

SELECT ID, user_login FROM wp_users WHERE user_status = 1;

Также зайдите в раздел "Пользователи" в админке WordPress — заблокированных пользователей с user_status=1 не должно быть.

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

SELECT * FROM wp_usermeta WHERE user_id NOT IN (SELECT ID FROM wp_users);

Если есть записи у несуществующих пользователей — их тоже можно удалить:

DELETE FROM wp_usermeta WHERE user_id NOT IN (SELECT ID FROM wp_users);

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

  • Удаление без резервной копии: всегда делайте бэкап базы перед массовым удалением пользователей.
  • Удаление через фронтенд без проверки прав: запускать скрипты удаления можно только из админки или с проверкой прав, иначе рискуете безопасностью.
  • Некорректное определение заблокированных пользователей: не все используют user_status — уточните у разработчиков или проверьте метаданные.
  • Остаточные метаданные: после удаления пользователей в базе могут остаться метаданные — обязательно очищайте таблицу wp_usermeta.
  • Ошибки в SQL-запросах: используйте $wpdb->prepare() для безопасности при динамическом формировании запросов.

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

  • Используйте WP CLI для массовых операций: команда wp user delete позволяет быстро и безопасно удалить пользователей по ID.
  • Оптимизируйте базу данных: после удаления пользователей выполните оптимизацию таблиц через phpMyAdmin или WP-CLI (wp db optimize).
  • Ограничьте доступ к скриптам удаления: добавляйте проверку current_user_can('manage_options') и nonce для защиты от CSRF.
  • Мониторьте базу: регулярно проверяйте количество пользователей и метаданных, чтобы вовремя выявлять накопление мусора.

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

СпособПлюсыМинусыКомпромисс
Ручное удаление через админку Просто, не требует кода Трудоёмко при большом количестве пользователей Использовать для единичных случаев
WP CLI Быстро, эффективно, безопасно Требует доступа к серверу и командной строке Оптимально для разработчиков и администраторов
Кастомный PHP-скрипт Гибкость, можно учесть особенности проекта Риск ошибки в коде, нужно тестировать Использовать с проверкой прав и резервным копированием
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙