На больших сайтах WordPress с множеством зарегистрированных пользователей часто возникает необходимость очистить базу от неактивных аккаунтов. Удаление таких пользователей помогает повысить безопасность, снизить нагрузку на базу данных и улучшить управление сайтом. В этой статье подробно разберём, как автоматически находить и удалять неактивных пользователей WordPress с помощью собственного кода и готовых решений.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи — это учетные записи, которые давно не заходили на сайт и, вероятно, уже не используются. Они создают несколько проблем:
- Безопасность. Заброшенные аккаунты могут стать уязвимостью, особенно если у пользователя были повышенные права.
- Оптимизация базы данных. Чем больше пользователей, тем больше размер таблицы
wp_usersи связанных метаданных. Это замедляет запросы и резервное копирование. - Управление сайтом. Проще работать с актуальной базой пользователей, особенно при рассылках и аналитике.
Поэтому регулярное удаление неактивных пользователей — хорошая практика для владельцев сайтов на WordPress.
Как определить неактивных пользователей: критерии выбора
Прежде чем удалять пользователей, нужно понять, кого считать неактивным. Основные критерии:
- Дата последнего входа. Самый точный способ — проверить, когда пользователь последний раз заходил в админку или на сайт.
- Дата регистрации. Если пользователь зарегистрировался давно, но ни разу не заходил — вероятно, это неактивный аккаунт.
- Роли пользователей. Обычно не удаляют администраторов и редакторов, чтобы не повредить работу сайта.
WordPress по умолчанию не хранит дату последнего входа, поэтому для реализации понадобится либо плагин, либо собственный код, который будет фиксировать эти данные.
Как сохранить дату последнего входа пользователя в WordPress
Чтобы отследить последний вход пользователя, добавим в тему или плагин следующий код, который будет обновлять мета-данные пользователя при успешной авторизации:
function wpmy_update_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'wpmy_last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'wpmy_update_last_login', 10, 2 );
Этот код сохраняет текущую дату и время в пользовательском мета-поле wpmy_last_login при каждом входе.
Как найти и удалить неактивных пользователей с помощью кода
Теперь, когда у нас есть дата последнего входа, можно написать функцию, которая удалит пользователей, не заходивших, например, более 180 дней, исключая администраторов. Вот пример реализации:
function wpmy_delete_inactive_users( $days_inactive = 180 ) {
global $wpdb;
$date_limit = date( 'Y-m-d H:i:s', strtotime( "-{$days_inactive} days" ) );
// Получаем ID пользователей с ролью, кроме администраторов
$users = get_users( array(
'exclude' => array(),
'role__not_in' => array('Administrator'),
'meta_key' => 'wpmy_last_login',
'meta_value' => $date_limit,
'meta_compare' => '<',
'fields' => array('ID')
) );
// Также ищем пользователей без входа (нет мета), зарегистрированных давно
$args = array(
'role__not_in' => array('Administrator'),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'wpmy_last_login',
'compare' => 'NOT EXISTS'
),
array(
'key' => 'wpmy_last_login',
'value' => $date_limit,
'compare' => '<'
)
),
'date_query' => array(
array(
'column' => 'user_registered',
'before' => $date_limit
)
),
'fields' => array('ID')
);
$inactive_users = get_users( $args );
// Объединяем результаты
$all_to_delete = array_unique( array_merge( $users, $inactive_users ) );
foreach ( $all_to_delete as $user_id ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user( $user_id );
}
return count( $all_to_delete );
}
// Пример вызова функции
// echo 'Удалено пользователей: ' . wpmy_delete_inactive_users( 180 );
Данный код удалит всех пользователей, кроме администраторов, которые не заходили на сайт более 180 дней, а также тех, кто вообще не совершал вход с момента регистрации.
Автоматизация удаления через WP-Cron
Чтобы не запускать функцию вручную, можно настроить автоматическое выполнение с помощью WP-Cron. Добавим планировщик задач:
function wpmy_schedule_delete_inactive_users() {
if ( ! wp_next_scheduled( 'wpmy_cron_delete_inactive_users' ) ) {
wp_schedule_event( time(), 'daily', 'wpmy_cron_delete_inactive_users' );
}
}
add_action( 'wp', 'wpmy_schedule_delete_inactive_users' );
function wpmy_cron_delete_inactive_users_callback() {
wpmy_delete_inactive_users( 180 );
}
add_action( 'wpmy_cron_delete_inactive_users', 'wpmy_cron_delete_inactive_users_callback' );
Этот код запустит удаление неактивных пользователей ежедневно. Вы можете изменить период запуска, используя другие интервалы, или создавать свои.
Готовые плагины для удаления неактивных пользователей
Если не хочется писать код самостоятельно, можно использовать готовые плагины. Вот несколько популярных:
- Inactive User Deleter — позволяет удалять пользователей, которые не заходили определённое время.
- Auto Delete Inactive Users — автоматизирует удаление по разным критериям, включая дату последнего входа.
- Clearfy Pro — расширенный инструмент оптимизации и безопасности, в том числе с функциями управления пользователями.
Использование плагинов удобно, если не хотите самостоятельно управлять кодом и хотите более гибкие настройки.
Безопасность и резервное копирование перед удалением пользователей
Перед массовым удалением пользователей крайне рекомендуется сделать резервную копию базы данных. Если что-то пойдет не так, вы сможете восстановить данные.
Также стоит тщательно проверять критерии отбора пользователей, чтобы случайно не удалить нужных сотрудников или подписчиков.
Заключение
Удаление неактивных пользователей в WordPress — важная задача для поддержания безопасности и оптимизации сайта. С помощью небольшого кода можно автоматически фиксировать дату последнего входа и регулярно удалять заброшенные аккаунты. При необходимости можно использовать готовые плагины, например, Clearfy Pro, который интегрируется с вашим сайтом и упрощает управление пользователями. Не забывайте о резервном копировании и тестировании перед применением таких решений на живом сайте.