wpdownload.ru wordpress WPDownload.ru

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

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

Накопление неактивных пользователей ухудшает производительность сайта, увеличивает нагрузку на базу данных и может создавать угрозы безопасности, особенно если учетные записи слабо защищены. Автоматизация удаления таких пользователей экономит время администраторов и поддерживает чистоту базы данных.

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

Под неактивными пользователями обычно понимают тех, кто не заходил на сайт длительное время. WordPress хранит дату последнего входа в метаполе last_login (если установлен соответствующий плагин) или можно использовать дату последней публикации/комментария, но для точности лучше добавить собственный механизм отслеживания активности.

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

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

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

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

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

Далее нужно написать функцию, которая будет удалять пользователей, не заходивших более X дней. Например, 180 дней.

function delete_inactive_users() {
    $days_inactive = 180; // период неактивности в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));

    $args = [
        'meta_key' => 'last_login',
        'meta_value' => $date_threshold,
        'meta_compare' => '<',
        'fields' => 'ID'
    ];
    $inactive_users = get_users($args);

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

// Запуск по крону
add_action('wp_login', 'track_user_last_login', 10, 2);

// Зарегистрировать событие cron, если еще не зарегистрировано
if (!wp_next_scheduled('delete_inactive_users_daily')) {
    wp_schedule_event(time(), 'daily', 'delete_inactive_users_daily');
}
add_action('delete_inactive_users_daily', 'delete_inactive_users');

Объяснение:

  • Параметр $days_inactive задаёт порог неактивности.
  • Функция get_users получает ID пользователей, у которых дата последнего входа старше порога.
  • Функция wp_delete_user удаляет пользователя.
  • Запуск происходит автоматически через WP-Cron каждый день.

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

Чтобы проверить, что решение работает корректно:

  1. Добавьте несколько тестовых пользователей и вручную установите им метаполе last_login со значением более 180 дней назад (через базу данных или кодом).
  2. Выполните функцию удаления вручную (через wp-cli или временный вызов функции).
  3. Убедитесь, что неактивные пользователи удалены, а активные остались.
  4. Проверьте логи ошибок и уведомления на сайте.
// Пример временного вызова
add_action('init', function() {
    if (isset($_GET['test_delete_users'])) {
        delete_inactive_users();
        exit('Inactive users deleted');
    }
});

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

  • Отсутствие записи даты последнего входа: без кода, фиксирующего дату входа, скрипт не сможет определить неактивных пользователей. Решение: добавить хук wp_login для обновления last_login.
  • Ошибка с WP-Cron: если WP-Cron отключён или не работает, удаление не будет происходить. Проверьте работу cron через плагин WP Crontrol или настройте системный cron.
  • Удаление администраторов: скрипт может удалить пользователей с правами администратора. Добавьте фильтр по роли, чтобы исключить важных пользователей.
  • Потеря данных: удаление пользователей без резервной копии может привести к потере контента. Рекомендуется перед удалением делать бэкап базы.

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

  • Исключайте из удаления пользователей с ролью administrator и других важных ролей:
$args['role__not_in'] = ['administrator', 'editor'];
  • Перед удалением можно отправлять уведомления пользователям с предупреждением о предстоящем удалении.
  • Если на сайте много пользователей, разбивайте удаление на партии по 50-100 пользователей, чтобы не перегрузить сервер.
  • Регулярно проверяйте работу WP-Cron и наличие ошибок в логах.
  • Для больших сайтов рассмотреть использование WP-CLI команд для удаления пользователей, что эффективнее и безопаснее.

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

МетодПлюсыМинусы
Плагин (например, Inactive User Deleter)Удобство, готовый интерфейс, уведомленияЗависимость от сторонних разработчиков, нагрузка
Собственный код с WP-CronПолный контроль, легковесность, кастомизацияТребует знаний PHP и WP, настройка cron
Удаление вручную через WP-CLIБыстро, эффективно для больших базНужен доступ к серверу, риск ошибок без контроля
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше