Ведение сайта на WordPress часто сопровождается проблемой наличия заблокированных или неактивных аккаунтов пользователей, которые могут занимать место в базе данных и создавать нагрузку на систему. В этой статье мы подробно разберём, как эффективно находить и удалять такие аккаунты, используя произвольный код и готовые решения, а также рассмотрим примеры плагинов для автоматизации этого процесса.
Почему важно удалять заблокированные аккаунты в WordPress
Заблокированные или деактивированные пользователи могут накапливаться со временем, особенно на больших ресурсах с активной регистрацией. Их наличие влияет не только на размер базы данных, но и может создавать проблемы с безопасностью, если кто-то попытается восстановить доступ к таким аккаунтам. Кроме того, очистка пользователей повышает производительность сайта и упрощает администрирование.
Удаление заблокированных аккаунтов позволяет:
- Сократить нагрузку на базу данных;
- Упростить управление пользователями;
- Повысить уровень безопасности;
- Уменьшить вероятность ошибок при массовых операциях с пользователями.
Как определить заблокированные аккаунты в WordPress
В WordPress нет встроенного статуса "заблокирован" для пользователей, но часто для блокировки используются различные методы, например:
- Добавление пользовательского метаполя (user meta), например
blockedилиis_blocked; - Изменение роли пользователя на неактивную или кастомную, например
blocked; - Отключение доступа через плагин безопасности, который хранит статусы в метаданных.
Поэтому для удаления нужно точно знать, как именно отмечены заблокированные пользователи на вашем сайте. Ниже приведём пример поиска пользователей с пользовательским метаполем is_blocked со значением 1.
Пример кода для удаления заблокированных пользователей по пользовательскому метаполю
Для массового удаления заблокированных пользователей можно использовать WP_User_Query и функцию удаления пользователя WordPress wp_delete_user. Вот пример функции, которую можно добавить в файл functions.php вашей темы или в отдельный плагин:
function wpqa_delete_blocked_users() {
$args = [
'meta_key' => 'is_blocked',
'meta_value' => '1',
'number' => -1
];
$user_query = new WP_User_Query($args);
$blocked_users = $user_query->get_results();
if (!empty($blocked_users)) {
foreach ($blocked_users as $user) {
wp_delete_user($user->ID);
}
}
}
// Запуск функции вручную, например, через хук admin_init или WP-CLI
// add_action('admin_init', 'wpqa_delete_blocked_users');Эта функция находит всех пользователей с метаполем is_blocked равным 1 и удаляет их. Будьте осторожны — удаление пользователей необратимо, поэтому перед выполнением сделайте резервную копию базы данных.
Удаление пользователей по роли "заблокирован"
Если для блокировки используется отдельная роль, например blocked, то удалить таких пользователей можно так:
function wpqa_delete_blocked_role_users() {
$blocked_users = get_users(['role' => 'blocked']);
foreach ($blocked_users as $user) {
wp_delete_user($user->ID);
}
}
// add_action('admin_init', 'wpqa_delete_blocked_role_users');Этот код находит всех пользователей с ролью blocked и удаляет их.
Автоматизация удаления заблокированных пользователей с помощью плагинов
Если вы предпочитаете не писать код, можно воспользоваться плагинами. Среди популярных вариантов:
- Bulk Delete — позволяет создавать правила для массового удаления пользователей по метаданным, ролям и другим параметрам. Поддерживает автоматическое удаление по расписанию.
- WP Bulk Delete — аналогичный плагин с гибкой настройкой фильтров.
- Clearfy Pro — этот плагин из набора оптимизации способен помочь с автоматизацией задач по очистке и оптимизации базы данных, включая работу с пользователями.
Для примера, Bulk Delete можно настроить так, чтобы периодически удалять пользователей с метаполем is_blocked = 1, что избавит вас от необходимости запускать код вручную.
Пример добавления пользовательского метаполя для блокировки и удаление
Если на вашем сайте не используется метаполевая блокировка, вы можете добавить её самостоятельно. Для этого создадим функцию, которая ставит метаполе is_blocked:
function wpqa_block_user($user_id) {
update_user_meta($user_id, 'is_blocked', '1');
}
// Использование
// wpqa_block_user(123); // где 123 - ID пользователяПосле блокировки вы сможете запускать функцию удаления, приведённую выше, чтобы очистить базу от заблокированных аккаунтов.
Выводы и рекомендации по безопасности
Удаление заблокированных аккаунтов — важная часть администрирования сайта. Чтобы не потерять нужных пользователей, перед удалением всегда:
- Делайте резервные копии базы данных;
- Проверяйте критерии поиска заблокированных пользователей;
- Используйте тестовую среду для проверки кода;
- Автоматизируйте процесс с помощью проверенных плагинов.
Для более удобного управления пользователями можно использовать плагин Clearfy Pro, который поможет не только с безопасностью, но и с оптимизацией сайта.