Для владельцев сайтов на WordPress, где ведется регистрация пользователей, рано или поздно встает задача очистки базы от неактивных аккаунтов. Неактивные пользователи занимают место в базе данных, могут создавать нагрузку, а также мешают грамотному управлению сообществом. В этой статье подробно разберем, как настроить автоматическое удаление неактивных пользователей в WordPress с помощью кода и плагинов.
Почему важно удалять неактивных пользователей
Неактивные пользователи — это аккаунты, которые долгое время не выполняли никаких действий на сайте, например, не заходили в личный кабинет, не публиковали комментарии или не совершали покупки (если сайт коммерческий). Основные проблемы таких аккаунтов:
- Загромождение базы данных, что замедляет работу сайта;
- Увеличение спама и мошеннических регистраций;
- Сложности в управлении пользователями (например, при рассылках);
- Негативное влияние на аналитику и статистику.
Регулярное удаление таких пользователей помогает поддерживать чистоту и производительность сайта.
Как определить неактивного пользователя
Ключевой момент — понять, по какому критерию считать пользователя неактивным. В WordPress есть мета-поле user_registered, в котором хранится дата регистрации, но этого недостаточно. Лучше использовать дату последнего входа пользователя.
По умолчанию WordPress не хранит дату последнего входа, поэтому ее нужно добавить самостоятельно. Рассмотрим, как это сделать с помощью собственного кода.
Добавляем дату последнего входа пользователя
В файл functions.php вашей темы или в отдельный плагин добавьте следующий код:
function wpkit_update_last_login($login, $user) {
update_user_meta($user->ID, 'wpkit_last_login', current_time('mysql'));
}
add_action('wp_login', 'wpkit_update_last_login', 10, 2);Этот код сохраняет дату и время последнего входа пользователя в мета-поле wpkit_last_login. Теперь можно использовать это значение для проверки активности.
Создаем функцию для удаления неактивных пользователей
Далее пишем функцию, которая будет находить пользователей, не заходивших на сайт более определенного количества дней, и удалять их. Например, удалим пользователей, которые не заходили более 180 дней.
function wpkit_delete_inactive_users($days = 180) {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
// Получаем ID пользователей, у которых дата последнего входа меньше пороговой или отсутствует
$user_ids = $wpdb->get_col($wpdb->prepare(
"SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wpkit_last_login' AND meta_value < %s",
$date_threshold
));
// Для пользователей без мета 'wpkit_last_login' считаем их неактивными
$user_ids_no_login = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->users WHERE ID NOT IN (
SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wpkit_last_login'
) AND user_registered < %s",
$date_threshold
));
$all_inactive = array_merge($user_ids, $user_ids_no_login);
foreach ($all_inactive as $user_id) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}Функция проверяет дату последнего входа, а у пользователей без этой информации — дату регистрации, и удаляет аккаунты, которые давно неактивны.
Автоматизация удаления с помощью WP-Cron
Чтобы регулярно выполнять очистку, настроим периодический запуск функции с помощью WP-Cron.
function wpkit_schedule_inactive_user_cleanup() {
if (!wp_next_scheduled('wpkit_inactive_user_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpkit_inactive_user_cleanup_hook');
}
}
add_action('wp', 'wpkit_schedule_inactive_user_cleanup');
add_action('wpkit_inactive_user_cleanup_hook', function() {
wpkit_delete_inactive_users(180); // удалять пользователей, неактивных 180 дней
});<Так очистка будет происходить автоматически один раз в сутки без вашего участия.
Использование плагинов для удаления неактивных пользователей
Если вы предпочитаете готовые решения, рассмотрите плагины, которые помогут с этой задачей:
- Inactive User Deleter – плагин для автоматического удаления пользователей по времени неактивности. Позволяет настроить период и исключения.
- WP Bulk Delete – мощный инструмент для массового удаления пользователей, записей и других данных по разным критериям, включая дату последнего входа.
Эти плагины можно найти и скачать на официальном репозитории WordPress или приобрести расширенные версии на WPSHOP.RU.
Как исключить важных пользователей из удаления
Часто на сайте есть администраторы, редакторы и другие важные роли, которых нельзя удалять. В нашем коде стоит добавить фильтр исключения таких пользователей.
function wpkit_delete_inactive_users($days = 180) {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$user_ids = $wpdb->get_col($wpdb->prepare(
"SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wpkit_last_login' AND meta_value < %s",
$date_threshold
));
$user_ids_no_login = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->users WHERE ID NOT IN (
SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wpkit_last_login'
) AND user_registered < %s",
$date_threshold
));
$all_inactive = array_merge($user_ids, $user_ids_no_login);
foreach ($all_inactive as $user_id) {
$user = get_userdata($user_id);
if (in_array('administrator', $user->roles) || in_array('editor', $user->roles)) {
continue; // пропускаем важных пользователей
}
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}Так вы обезопасите себя от случайного удаления ключевых аккаунтов.
Как проверить результат удаления
Рекомендуется вести логирование удаленных пользователей. Добавим простое логирование в файл:
function wpkit_delete_inactive_users($days = 180) {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$user_ids = $wpdb->get_col($wpdb->prepare(
"SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wpkit_last_login' AND meta_value < %s",
$date_threshold
));
$user_ids_no_login = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->users WHERE ID NOT IN (
SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wpkit_last_login'
) AND user_registered < %s",
$date_threshold
));
$all_inactive = array_merge($user_ids, $user_ids_no_login);
$log_file = WP_CONTENT_DIR . '/wpkit_inactive_users.log';
foreach ($all_inactive as $user_id) {
$user = get_userdata($user_id);
if (in_array('administrator', $user->roles) || in_array('editor', $user->roles)) {
continue;
}
if (wp_delete_user($user_id)) {
file_put_contents($log_file, "Deleted user ID: $user_id, login: {$user->user_login}\n", FILE_APPEND);
}
}
}Лог-файл wpkit_inactive_users.log появится в папке wp-content и позволит отслеживать, какие аккаунты были удалены.
Итоги и рекомендации
Автоматическое удаление неактивных пользователей помогает поддерживать сайт в порядке, снижать нагрузку и улучшать безопасность. В статье мы рассмотрели, как реализовать этот механизм на примере собственного кода с WP-Cron, а также упомянули полезные плагины.
Для расширения функционала стоит добавить уведомления пользователям перед удалением, создавать резервные копии базы и учитывать особенности вашего сайта, например, пользовательские роли и интеграции.