В любой CMS, включая WordPress, со временем накапливается множество неактивных пользователей. Они могут быть заброшенными аккаунтами, тестовыми пользователями или просто теми, кто давно не заходил на сайт. Такие пользователи создают нагрузку на базу данных и могут увеличивать риск безопасности, особенно если у них есть права администратора или редактора. В этой статье мы подробно разберем, как автоматизировать удаление неактивных пользователей в WordPress с помощью кода и плагинов.
Почему важно удалять неактивных пользователей?
Во-первых, это повышает безопасность. Старые аккаунты, особенно с высокими правами, могут быть скомпрометированы и использоваться злоумышленниками. Во-вторых, чистка базы пользователей улучшает производительность сайта, уменьшая размер таблиц и ускоряя запросы. В-третьих, это упрощает администрирование – легче управлять актуальными пользователями.
Удаление неактивных пользователей также помогает избежать спама и уменьшает нагрузку на систему уведомлений и рассылок.
Как определить неактивных пользователей в WordPress?
Основной критерий — время последнего входа (логина) пользователя. По умолчанию WordPress не хранит дату последнего входа, поэтому сначала нужно добавить такую возможность.
Добавление отслеживания последнего входа
Для этого используем хук wp_login, чтобы при каждом входе обновлять мета-поле пользователя с текущей датой:
function wpdetect_update_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'wpdetect_last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'wpdetect_update_last_login', 10, 2 );
Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин.
Автоматическое удаление пользователей, неактивных более N дней
После того, как мы получаем дату последнего входа, можно написать функцию, которая будет удалять пользователей, не заходивших на сайт длительное время. Для запуска этой функции удобно использовать WP-Cron.
Пример кода функции удаление неактивных пользователей
function wpdetect_delete_inactive_users() {
$days_inactive = 180; // Порог неактивности в днях
$date_threshold = date( 'Y-m-d H:i:s', strtotime( '-' . $days_inactive . ' days' ) );
$args = array(
'meta_key' => 'wpdetect_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 100,
);
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->get_results() ) ) {
foreach ( $user_query->get_results() as $user_id ) {
// Исключаем администраторов
if ( ! user_can( $user_id, 'administrator' ) ) {
wp_delete_user( $user_id );
}
}
}
}
// Регистрируем событие в WP-Cron
if ( ! wp_next_scheduled( 'wpdetect_daily_inactive_user_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpdetect_daily_inactive_user_cleanup' );
}
add_action( 'wpdetect_daily_inactive_user_cleanup', 'wpdetect_delete_inactive_users' );
Этот код будет ежедневно запускать функцию удаления пользователей, не заходивших на сайт более 180 дней, исключая администраторов.
Использование плагинов для удаления неактивных пользователей
Если не хочется писать код, можно использовать готовые решения. Ниже несколько популярных плагинов, которые помогут управлять пользователями по активности:
- Inactive User Deleter — позволяет настроить удаление пользователей, которые не заходили определенный период;
- Delete Inactive Users — простой плагин с фильтрами по ролям и дате последнего входа;
- WP Activity Log — ведет подробный лог активности пользователей и помогает выявлять неактивных.
Для интеграции с Inactive User Deleter можно настроить период очистки и роли пользователей.
Рекомендации по безопасному удалению пользователей
Прежде чем удалять пользователей, особенно автоматически, рекомендуем сделать резервную копию базы данных. Также стоит подумать о том, что делать с контентом пользователей — постами, комментариями и т.п. По умолчанию функция wp_delete_user() позволяет передать ID пользователя, которому будут переданы посты удаляемого пользователя.
Например, чтобы передать посты другому пользователю, измените функцию так:
wp_delete_user( $user_id, $new_owner_id );
Где $new_owner_id — ID пользователя, которому будут переданы посты.
Выводы и полезные советы
Удаление неактивных пользователей — необходимая часть поддержания безопасности и производительности сайта на WordPress. Автоматизация процесса с помощью WP-Cron и пользовательских функций позволяет экономить время и избегать накопления устаревших данных.
Если у вас большой проект или много пользователей, стоит дополнительно контролировать процесс с помощью логов и уведомлений. Для этого можно интегрировать функцию удаления с отправкой email-уведомлений администратору.
В итоге, простой код, описанный выше, вместе с регулярными проверками и бэкапами обеспечат чистоту и безопасность вашей базы пользователей.