wp-kurs.ru wordpress WP-Kurs

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

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

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

Основные признаки, что пора удалить или заблокировать пользователя:

  • Пользователь не входил в систему более 90 дней.
  • Аккаунт имеет статус заблокирован (через плагин или вручную).
  • Пользователь был отмечен как спамер или злоумышленник.
  • Нужно освободить роли и права для новых пользователей.

Как проверить в WordPress статус и активность пользователей

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

Например, можно использовать следующий запрос для получения пользователей, которые не заходили более 90 дней (если у вас есть мета-ключ last_login):

global $wpdb;

$days = 90;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

$users = $wpdb->get_results($wpdb->prepare(
    "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'last_login' AND meta_value < %s",
    $date_threshold
));

Если вы еще не храните дату последнего входа, стоит добавить это вручную через хук wp_login:

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

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

1. Создание резервной копии базы

Перед массовым удалением пользователей сделайте резервную копию базы данных через phpMyAdmin, WP-CLI или плагин архивирования.

2. Фильтрация пользователей по условиям

Используйте WP_User_Query для выборки пользователей, соответствующих условиям:

$args = [
    'meta_key'     => 'last_login',
    'meta_value'   => date('Y-m-d H:i:s', strtotime('-90 days')),
    'meta_compare' => '<',
    'number'      => -1
];
$user_query = new WP_User_Query($args);
$users_to_remove = $user_query->get_results();

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

Для удаления с переносом контента (например, постов) на другого пользователя используйте wp_delete_user() с ID нового владельца:

$new_owner_id = 1; // Администратор
foreach ($users_to_remove as $user) {
    wp_delete_user($user->ID, $new_owner_id);
}

Если контент можно удалить вместе с пользователем, просто вызовите wp_delete_user($user->ID).

4. Блокировка пользователей (альтернативный способ)

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

foreach ($users_to_remove as $user) {
    update_user_meta($user->ID, 'account_blocked', 1);
}

И добавьте проверку в хук authenticate, чтобы не позволить заблокированным пользователям войти:

add_filter('authenticate', function($user, $username, $password) {
    if (is_wp_error($user)) {
        return $user;
    }
    $blocked = get_user_meta($user->ID, 'account_blocked', true);
    if ($blocked) {
        return new WP_Error('account_blocked', __('Ваш аккаунт заблокирован. Обратитесь к администратору.'));
    }
    return $user;
}, 30, 3);

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

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

  • В админке в разделе Пользователи отсутствуют удалённые аккаунты.
  • Заблокированные пользователи не могут войти — при попытке входа появляется сообщение об ошибке.
  • Для удалённых пользователей контент корректно переназначен или удалён.
  • В базе данных отсутствуют метаданные удалённых пользователей (проверьте таблицы wp_users и wp_usermeta).

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

  • Отсутствие даты последнего входа. Без этого сложно точно определить неактивных пользователей. Решение: реализуйте хранение даты входа через хук wp_login.
  • Удаление пользователей без переназначения контента. В результате посты могут остаться без автора. Используйте второй параметр wp_delete_user() для переназначения.
  • Пользователи продолжают входить после блокировки. Проверьте, что фильтр authenticate добавлен и работает корректно, нет конфликтов с другими плагинами.
  • Удаление пользователей напрямую из базы без использования функций WP. Это приводит к оставшимся метаданным и ошибкам. Всегда используйте API WordPress.

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

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

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

МетодПлюсыМинусыРекомендуемое использование
Удаление через wp_delete_user()Полное удаление данных, освобождение ролейПотеря доступа, удаление контента без переназначенияДля окончательной очистки базы
Блокировка через мета-поле + фильтр authenticateСохраняет данные, можно быстро разблокироватьПользователи остаются в базе, нагрузка не уменьшаетсяВременная мера или при необходимости сохранить историю
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее