В крупных проектах на WordPress со временем скапливается большое количество пользователей, которые давно не заходили на сайт. Такие неактивные пользователи могут создавать нагрузку на базу данных, мешать аналитике и снижать безопасность сайта. В этой статье мы подробно рассмотрим, как настроить автоматическое удаление неактивных пользователей с помощью встроенных cron задач WordPress и собственных функций.
Почему важно удалять неактивных пользователей
Удаление неактивных пользователей помогает:
- Уменьшить размер базы данных и повысить производительность сайта.
- Снизить риски безопасности — заброшенные аккаунты могут быть взломаны.
- Поддерживать актуальную базу подписчиков и пользователей.
- Упростить администрирование и аналитику.
Автоматизация этого процесса избавляет от необходимости делать это вручную, особенно когда пользователей тысячи.
Что мы будем делать: пошаговый план
- Определим, что считать неактивным пользователем (например, не заходил 6 месяцев).
- Создадим функцию удаления таких пользователей.
- Добавим cron задачу, чтобы запускать эту функцию регулярно.
- Добавим безопасность и логи.
Определение неактивных пользователей
Для начала нужно понять, как определить неактивность. WordPress хранит дату последнего посещения пользователя в пользовательском метаполе last_login, но по умолчанию это поле не заполняется. Поэтому сначала нужно добавить запись времени последнего входа пользователя на сайт.
Добавляем запись времени последнего входа
Используем хук wp_login, который вызывается при авторизации:
add_action('wp_login', 'wpaddons_update_last_login', 10, 2);
function wpaddons_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'last_login', current_time('mysql'));
}
Теперь при каждом входе пользователя в базу будет записываться актуальное время.
Функция удаления неактивных пользователей
Создадим функцию, которая будет искать пользователей, у которых last_login старше 6 месяцев, и удалять их.
function wpaddons_delete_inactive_users() {
$threshold = date('Y-m-d H:i:s', strtotime('-6 months'));
$args = [
'meta_key' => 'last_login',
'meta_value' => $threshold,
'meta_compare' => '<',
'fields' => ['ID'],
'number' => 100,
];
$user_query = new WP_User_Query($args);
$users = $user_query->get_results();
if (!empty($users)) {
foreach ($users as $user_id) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}
}
Обратите внимание, что здесь мы удаляем пользователей по 100 за раз, чтобы не перегружать сервер.
Настройка cron задачи для регулярного запуска
WordPress использует WP-Cron для запуска запланированных задач. Зарегистрируем собственное событие, которое будет выполняться, например, раз в сутки.
add_action('wpaddons_daily_delete_inactive_users', 'wpaddons_delete_inactive_users');
function wpaddons_schedule_cron() {
if (!wp_next_scheduled('wpaddons_daily_delete_inactive_users')) {
wp_schedule_event(time(), 'daily', 'wpaddons_daily_delete_inactive_users');
}
}
add_action('wp', 'wpaddons_schedule_cron');
Так мы гарантируем, что задача запускается ежедневно.
Добавление логирования и безопасности
Чтобы отслеживать, сколько пользователей удаляется, и не пропустить ошибки, добавим простой лог в файл.
function wpaddons_delete_inactive_users() {
$threshold = date('Y-m-d H:i:s', strtotime('-6 months'));
$args = [
'meta_key' => 'last_login',
'meta_value' => $threshold,
'meta_compare' => '<',
'fields' => ['ID'],
'number' => 100,
];
$user_query = new WP_User_Query($args);
$users = $user_query->get_results();
$count = 0;
if (!empty($users)) {
foreach ($users as $user_id) {
require_once ABSPATH . 'wp-admin/includes/user.php';
if (wp_delete_user($user_id)) {
$count++;
}
}
}
$log = sprintf("[%s] Deleted %d inactive users\n", date('Y-m-d H:i:s'), $count);
error_log($log, 3, WP_CONTENT_DIR . '/inactive-users.log');
}
Лог будет храниться в файле wp-content/inactive-users.log, что удобно для проверки.
Дополнительные рекомендации и плагины
Если не хочется писать код с нуля, можно использовать плагины:
- Clearfy Pro — содержит функции для оптимизации пользователей и автоматизации.
- WPRemark — плагин управления пользователями с расширенными возможностями.
При использовании плагинов внимательно читайте документацию и делайте резервные копии.
Заключение по теме удаления неактивных пользователей
Автоматическое удаление неактивных пользователей в WordPress не только поддерживает базу в порядке, но и повышает безопасность сайта. С помощью описанных функций и cron задач вы можете легко настроить такой процесс под свои нужды, а при необходимости расширить функционал логированием и уведомлениями.