В процессе эксплуатации сайта на WordPress часто возникает ситуация, когда база пользователей разрастается, но значительная часть аккаунтов становится неактивной. Неактивные пользователи могут занимать место в базе данных, создавать нагрузку и мешать точному анализу аудитории. В этой статье разберём, как эффективно удалить неактивных пользователей WordPress за определённый период, используя готовые плагины и собственные решения на PHP.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи — это те, кто долгое время не заходил на сайт или не проявлял активности. Их удаление полезно по нескольким причинам:
- Оптимизация базы данных: меньше записей — быстрее запросы и меньше нагрузка.
- Безопасность: заброшенные аккаунты потенциально уязвимы для взлома.
- Чистота статистики: точнее данные по активным пользователям.
Удаление неактивных пользователей — это рутинная задача, которую можно автоматизировать.
Как определить неактивных пользователей: ключевые параметры
Для удаления нужно определить, что считать «неактивным». Обычно берут такие критерии:
- Дата последнего входа — если пользователь не заходил на сайт, например, 6 месяцев или год;
- Дата регистрации — если аккаунт создан, но пользователь ни разу не заходил;
- Отсутствие активности в комментариях, заказах, публикациях — для сайтов с WooCommerce или блогом.
К сожалению, WordPress по умолчанию не хранит дату последнего входа, поэтому нужно её отслеживать самостоятельно, используя плагины или код.
Отслеживание даты последнего входа пользователя
Чтобы реализовать удаление неактивных пользователей, сначала нужно сохранять дату их последнего входа. Например, добавим такой код в файл functions.php вашей темы (wp-lessons_save_last_login):
add_action('wp_login', 'wp-lessons_save_last_login', 10, 2);
function wp-lessons_save_last_login($user_login, $user) {
update_user_meta($user->ID, 'wp-lessons_last_login', current_time('mysql'));
}
Этот код срабатывает при каждом входе пользователя и сохраняет текущую дату и время в метаполе wp-lessons_last_login.
Удаление неактивных пользователей по дате последнего входа
Когда даты сохраняются, можно написать функцию, которая удалит пользователей, не заходивших на сайт более заданного периода, например, 6 месяцев:
function wp-lessons_delete_inactive_users($months = 6) {
global $wpdb;
$date_limit = date('Y-m-d H:i:s', strtotime("-{$months} months"));
$users = get_users(array(
'meta_key' => 'wp-lessons_last_login',
'meta_value' => $date_limit,
'meta_compare' => '<',
'fields' => 'ID',
));
foreach ($users as $user_id) {
wp_delete_user($user_id);
}
return count($users);
}
Эта функция найдёт всех пользователей, у которых дата последнего входа меньше даты лимита, и удалит их.
Автоматизация удаления с помощью WP-Cron
Чтобы не запускать вручную, можно добавить задачу в WP-Cron, которая будет запускаться ежемесячно:
add_action('wp_lessons_cron_delete_inactive', 'wp-lessons_cron_delete_inactive_handler');
function wp-lessons_cron_delete_inactive_handler() {
$deleted_count = wp-lessons_delete_inactive_users(6);
if ($deleted_count) {
error_log("[WP-Lessons] Удалено {$deleted_count} неактивных пользователей.");
}
}
if (!wp_next_scheduled('wp_lessons_cron_delete_inactive')) {
wp_schedule_event(time(), 'monthly', 'wp_lessons_cron_delete_inactive');
}
Так вы настроите автоматическую очистку с периодичностью раз в месяц.
Удаление пользователей с нулевой активностью (никогда не заходили)
В WordPress дата последнего входа может отсутствовать у пользователей, которые никогда не входили. Часто полезно их тоже удалить, особенно если аккаунты созданы давно. Можно сделать так:
function wp-lessons_delete_never_logged_in($months = 6) {
$date_limit = date('Y-m-d H:i:s', strtotime("-{$months} months"));
$users = get_users(array(
'meta_key' => 'wp-lessons_last_login',
'meta_compare' => 'NOT EXISTS',
'date_query' => array(
'column' => 'user_registered',
'before' => $date_limit,
),
'fields' => 'ID',
));
foreach ($users as $user_id) {
wp_delete_user($user_id);
}
return count($users);
}
Эта функция удалит пользователей, у которых нет даты последнего входа, а дата регистрации старше 6 месяцев.
Использование плагинов для управления неактивными пользователями
Если не хочется писать код, можно использовать плагины. Вот несколько полезных:
- Inactive User Deleter — позволяет автоматически удалять пользователей, не заходивших указанное время.
- WP Last Login — сохраняет дату последнего входа, удобен для отчётов.
- Clearfy Pro — содержит опции для очистки и оптимизации базы, в том числе работу с пользователями.
Например, плагин Inactive User Deleter позволяет настроить удаление пользователей по времени неактивности через удобный интерфейс.
Советы по безопасности при массовом удалении пользователей
Прежде чем запускать удаление, учтите:
- Сделайте резервную копию базы данных.
- Исключите из удаления администраторов и важных ролей.
- Тестируйте функцию на небольшой выборке.
- Добавьте уведомления или логирование для контроля процесса.
Например, можно изменить функцию удаления, чтобы она пропускала админов:
foreach ($users as $user_id) {
$user = get_userdata($user_id);
if (in_array('administrator', $user->roles)) continue;
wp_delete_user($user_id);
}
Заключение
Удаление неактивных пользователей — важный этап поддержания чистоты и безопасности сайта WordPress. С помощью простого кода и планировщика задач можно автоматизировать этот процесс и избежать лишней нагрузки на базу. Если кодирование не для вас, плагины с функцией удаления и учётом даты последнего входа станут хорошим решением.