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

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

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

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

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

Перед тем как автоматизировать удаление, важно определить, кого именно вы хотите удалять. Обычно критерии включают:

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

Такой подход позволит избежать случайного удаления важных аккаунтов.

Реализация автоматического удаления пользователей через WP-Cron

Для автоматизации удаления мы можем использовать встроенный в WordPress планировщик задач WP-Cron, который будет запускать функцию очистки по расписанию.

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

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

function wptest_delete_inactive_users() {
    $days_inactive = 180; // Количество дней неактивности
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
    
    $args = [
        'role__in' => ['subscriber', 'customer'], // Роли для удаления
        'meta_query' => [
            [
                'key' => 'last_login',
                'value' => $date_threshold,
                'compare' => '<',
                'type' => 'DATETIME'
            ]
        ],
        'fields' => 'ID'
    ];
    
    $user_query = new WP_User_Query($args);
    $users = $user_query->get_results();
    
    if (!empty($users)) {
        foreach ($users as $user_id) {
            wp_delete_user($user_id);
        }
    }
}

Обратите внимание, что для работы этого кода требуется, чтобы у пользователей хранилась дата последнего входа в метаполе last_login. По умолчанию WordPress не сохраняет эту дату, поэтому нужно добавить её самостоятельно.

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

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

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

Теперь у каждого пользователя будет актуальная дата последнего входа, по которой можно фильтровать.

Настройка WP-Cron для регулярного запуска удаления

Зарегистрируем задачу, которая будет запускаться раз в сутки:

function wptest_schedule_user_cleanup() {
    if (!wp_next_scheduled('wptest_daily_user_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wptest_daily_user_cleanup');
    }
}
add_action('wp', 'wptest_schedule_user_cleanup');

add_action('wptest_daily_user_cleanup', 'wptest_delete_inactive_users');

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

Использование плагинов для автоматического удаления пользователей

Если вы не хотите писать код самостоятельно, можно воспользоваться плагинами. Ниже несколько вариантов:

  • Inactive User Deleter — позволяет настроить удаление пользователей по неактивности, выбрать роли и время неактивности.
  • WP User Manager — расширенный плагин для управления пользователями с возможностью автоматизации действий.
  • Clearfy Pro (ссылка на плагин) — содержит оптимизационные функции, включая управление пользователями и безопасностью.

Преимущество плагинов — удобный интерфейс и дополнительные возможности, однако для точного соответствия требованиям часто приходится дописывать код.

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

Резервное копирование базы данных

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

Исключение важных пользователей

Обязательно исключайте из удаления администраторов, редакторов и других ключевых ролей. Можно расширить функцию, добавив условие:

$excluded_roles = ['administrator', 'editor'];
// при проверке роли пользователя пропускать удаление для этих ролей

Информирование пользователей

Если у вас сообщество с зарегистрированными пользователями, имеет смысл уведомлять их о предстоящем удалении аккаунта из-за неактивности (например, за 7 дней до удаления). Это можно реализовать отдельной задачей в WP-Cron с отправкой писем.

Заключение по теме автоматического удаления пользователей

Автоматизация удаления неактивных пользователей — это эффективный способ поддерживать чистоту базы данных и безопасность WordPress-сайта. С помощью WP-Cron и небольшого кода можно реализовать гибкую систему удаления с учетом ролей и времени неактивности. Для более сложных сценариев подойдут специализированные плагины или комбинация плагинов с кастомным кодом.

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

Как правильно удалить вариации товаров в WooCommerce
02.05.2026
Автоматический импорт постов в WordPress: плагины и кастомные решения
05.01.2026
Как сделать безопасный вход в WordPress с помощью двухфакторной авторизации
26.11.2025
Как автоматизировать удаление старого контента в WordPress
07.02.2026
Как создать наступление по AJAX в WordPress
04.11.2025