В процессе эксплуатации сайта на WordPress часто накапливается множество пользователей, которые уже неактивны или удалены, но их записи остаются в базе данных. Это может приводить к замедлению работы сайта, увеличению размера базы данных и проблемам с безопасностью. В этой статье мы подробно рассмотрим, как корректно удалить удалённых пользователей из базы данных WordPress с помощью кода и плагинов, а также как очистить связанные с ними данные.
Почему важно удалять удалённых пользователей из базы данных WordPress
Когда вы удаляете пользователя через админ-панель WordPress, данные пользователя обычно удаляются, но в некоторых случаях записи о пользователях остаются в базе, особенно если вы переносили сайт или использовали сторонние плагины. Накопление таких «мертвых» пользователей может привести к следующим проблемам:
- Увеличение размера базы данных и замедление запросов;
- Проблемы с безопасностью, если учётные записи оставлены активными;
- Ошибки при работе плагинов, которые делают запросы к таблицам пользователей;
- Путаница при администрировании сайта.
Поэтому важно периодически проверять и удалять остаточные записи пользователей.
Как найти и удалить удалённых пользователей с помощью SQL-запросов
Если вы знакомы с работой с базой данных напрямую, можно выполнить SQL-запросы для выявления и удаления ненужных пользователей. В WordPress информация о пользователях хранится в таблицах wp_users и wp_usermeta. Для начала полезно определить, какие пользователи считаются «удалёнными» или неактивными.
Например, можно считать удалёнными пользователей без определённых метаданных, например, без роли:
SELECT u.ID, u.user_login FROM wp_users u
LEFT JOIN wp_usermeta m ON u.ID = m.user_id AND m.meta_key = 'wp_capabilities'
WHERE m.user_id IS NULL;
Этот запрос вернёт пользователей, у которых нет записей о ролях, что часто говорит об удалённых или неполных записях.
Для удаления таких пользователей вместе с метаданными можно использовать следующий код:
DELETE u, m FROM wp_users u
LEFT JOIN wp_usermeta m ON u.ID = m.user_id
WHERE u.ID IN (
SELECT user_id FROM (
SELECT u2.ID as user_id FROM wp_users u2
LEFT JOIN wp_usermeta m2 ON u2.ID = m2.user_id AND m2.meta_key = 'wp_capabilities'
WHERE m2.user_id IS NULL
) AS temp
);
Обязательно сделайте резервную копию базы данных перед выполнением таких запросов!
Использование PHP-кода для удаления удалённых пользователей в WordPress
Если вы хотите интегрировать удаление в функционал сайта, можно написать функцию на PHP, которую затем вызвать в админ-панели или через WP-CLI. Ниже пример функции wpconfig_delete_orphan_users(), которая удаляет пользователей без ролей.
function wpconfig_delete_orphan_users() {
global $wpdb;
// Получаем ID пользователей без ролей
$user_ids = $wpdb->get_col(
"SELECT u.ID FROM {$wpdb->users} u
LEFT JOIN {$wpdb->usermeta} m ON u.ID = m.user_id AND m.meta_key = '{$wpdb->prefix}capabilities'
WHERE m.user_id IS NULL"
);
if (empty($user_ids)) {
return 'Нет пользователей без ролей для удаления.';
}
foreach ($user_ids as $user_id) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
return count($user_ids) . ' пользователей без ролей удалено.';
}
// Использование: echo wpconfig_delete_orphan_users();
Функция использует API WordPress для корректного удаления пользователей и всех связанных данных.
Плагины для управления удалёнными и неактивными пользователями
Если вы не хотите работать с кодом, можно использовать специализированные плагины:
- Bulk Delete — позволяет массово удалять пользователей по различным критериям, включая неактивность и отсутствие ролей. Поддерживает фильтры по дате и ролям. Официальная страница плагина.
- Inactive User Deleter — удаляет пользователей, которые не заходили на сайт длительное время. Можно настроить порог неактивности и исключить администраторов.
- WP User Manager — расширенный менеджер пользователей с возможностью фильтрации и удаления.
Например, с Bulk Delete вы можете настроить удаление пользователей без ролей следующим образом:
- Установите и активируйте плагин.
- Перейдите в Bulk Delete > Delete Users.
- Выберите фильтр «Users Without Role».
- Настройте дополнительные условия, если нужно.
- Запустите удаление.
Как очистить метаданные и связанные данные удалённых пользователей
Удаление пользователя через стандартные функции WordPress удаляет его записи из таблицы wp_users и метаданные из wp_usermeta, но могут оставаться другие данные, например:
- Комментарии, привязанные к пользователю;
- Посты и страницы, если вы не выбрали их удаление или перенос;
- Данные сторонних плагинов, которые сохраняются в своих таблицах или метаданных.
Для удаления комментариев можно использовать следующий код:
function wpconfig_delete_user_comments($user_id) {
global $wpdb;
$comments = $wpdb->get_col($wpdb->prepare("SELECT comment_ID FROM {$wpdb->comments} WHERE user_id = %d", $user_id));
foreach ($comments as $comment_id) {
wp_delete_comment($comment_id, true);
}
}
Вызывать эту функцию можно перед удалением пользователя, чтобы полностью очистить данные. Для постов и страниц рекомендуем либо переназначить авторство другому пользователю, либо удалить их вручную через админку.
Советы по безопасности при удалении пользователей
При удалении пользователей соблюдайте следующие рекомендации:
- Всегда делайте резервную копию базы данных перед выполнением массовых операций.
- Проверяйте права доступа: удаление пользователей доступно только администраторам.
- Тестируйте код на тестовом сайте, чтобы избежать потери важных данных.
- Используйте API WordPress для удаления, чтобы корректно обрабатывались все связанные данные.
Вывод
Удаление удалённых и неактивных пользователей из WordPress — важная задача для поддержания производительности и безопасности сайта. С помощью SQL-запросов, PHP-функций и специализированных плагинов можно эффективно очищать базу данных от ненужных записей. Обязательно учитывайте связанные данные и делайте резервные копии!
Для удобства управления пользователями советуем рассмотреть плагин Bulk Delete от WPShop с удобным интерфейсом и широкими возможностями фильтрации.