Управление пользователями — важная часть администрирования любого сайта на WordPress. С течением времени на сайте накапливаются пользователи, которые зарегистрировались, но давно не заходили или вообще не активны. Это может быть проблемой с точки зрения безопасности и производительности, особенно если у вас много пользователей с правами редактора, автора или выше. В этой статье разберём, как автоматически удалять неактивных пользователей WordPress, используя код и готовые плагины.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи могут представлять угрозу безопасности, так как их аккаунты могут быть взломаны или использоваться для спама. Кроме того, большое количество неактивных записей в базе данных замедляет работу сайта и усложняет управление пользователями. Регулярное удаление таких аккаунтов помогает:
- Повысить безопасность сайта.
- Оптимизировать базу данных.
- Снизить нагрузку на систему и сервер.
Как определить неактивного пользователя
Ключевой момент — определить, что значит «неактивный» пользователь. Чаще всего используют дату последнего входа (last login) или дату последнего обновления профиля. В WordPress по умолчанию нет поля для даты последнего входа, поэтому его нужно добавить самостоятельно или использовать плагины.
Рассмотрим добавление метаполя с датой последнего входа:
add_action('wp_login', 'wpbox_update_last_login', 10, 2);
function wpbox_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wpbox_last_login', current_time('mysql'));
}
Этот код сохраняет дату последнего входа пользователя в метаданные пользователя с ключом wpbox_last_login. Теперь можно использовать это поле для фильтрации неактивных пользователей.
Автоматическое удаление пользователей с помощью кода
Ниже пример функции, которая удаляет пользователей, не заходивших более 180 дней:
function wpbox_delete_inactive_users($days = 180) {
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$args = [
'meta_key' => 'wpbox_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<=',
'fields' => 'ID',
'number' => 1000, // для ограничения выборки
];
$user_query = new WP_User_Query($args);
$users_to_delete = $user_query->get_results();
foreach ($users_to_delete as $user_id) {
wp_delete_user($user_id);
}
}
// Запуск функции через WP Cron или вручную
// wpbox_delete_inactive_users(180);
Этот код ищет пользователей, у которых дата последнего входа старше 180 дней, и удаляет их. Чтобы автоматизировать процесс, можно добавить вызов функции в WP Cron, например, запускать раз в неделю.
Добавление задачи в WP Cron
add_action('wpbox_cron_delete_inactive_users', 'wpbox_delete_inactive_users');
if (!wp_next_scheduled('wpbox_cron_delete_inactive_users')) {
wp_schedule_event(time(), 'weekly', 'wpbox_cron_delete_inactive_users');
}
Этот код создаёт еженедельное событие WP Cron, которое будет запускать удаление неактивных пользователей.
Использование плагинов для удаления неактивных пользователей
Если вы не хотите писать код, есть плагины для этой задачи:
- Inactive User Deleter — позволяет удалять пользователей по сроку неактивности, настраивается через админку.
- WP Last Login — добавляет дату последнего входа, чтобы вы могли вручную фильтровать и удалять пользователей.
- User Cleanup — комплексный плагин для управления и удаления неактивных аккаунтов.
При использовании плагинов обратите внимание на совместимость с вашей версией WordPress и наличие регулярных обновлений для безопасности.
Безопасность и резервное копирование перед удалением
Перед массовым удалением пользователей обязательно сделайте резервную копию базы данных. Можно использовать плагин Backup от WPSHOP для автоматизации резервного копирования.
Удаление пользователей без резервной копии может привести к потере важных данных, особенно если пользователи создавали контент. При необходимости можно переназначить статьи другому автору, чтобы сохранить контент.
Переназначение контента перед удалением
Чтобы избежать потери записей, можно переназначить их другому пользователю, например, администратору:
function wpbox_reassign_user_content($old_user_id, $new_user_id) {
$args = [
'author' => $old_user_id,
'post_type' => 'any',
'post_status' => 'any',
'numberposts' => -1
];
$posts = get_posts($args);
foreach ($posts as $post) {
wp_update_post([
'ID' => $post->ID,
'post_author' => $new_user_id
]);
}
}
Вызывайте эту функцию перед удалением пользователя, передавая ID старого и нового автора.
Выводы и рекомендации
Автоматическое удаление неактивных пользователей помогает поддерживать безопасность и порядок на сайте WordPress. Для этого необходимо:
- Добавить отслеживание даты последнего входа.
- Настроить скрипт или плагин для удаления пользователей, неактивных определённый период.
- Обязательно делать резервное копирование данных.
- При необходимости переназначать контент перед удалением.
Реализация через WP Cron позволяет полностью автоматизировать процесс без постоянного участия администратора. Использование готовых плагинов упрощает задачу, но требует проверки на совместимость и корректность настроек.
Для скачивания плагинов и инструментов резервного копирования можно посетить https://wpshop.ru/plugins.