Почему важно правильно удалять удалённых пользователей в WordPress
В WordPress со временем накапливаются пользователи, которые давно не активны или были удалены из внешних систем, но остались в базе данных. Если просто удалить таких пользователей через админку, могут возникнуть проблемы с зависимостями — например, у пользователя могли остаться записи, комментарии или медиафайлы. Неправильное удаление пользователей способно привести к ошибкам на сайте, потере контента или даже сбоям в работе плагинов.
Кроме того, при большом количестве пользователей ручное удаление становится утомительным и чреватым ошибками. В этой статье мы рассмотрим, как безопасно и эффективно удалять удалённых пользователей с помощью кода и плагинов, минимизируя риски и сохраняя целостность сайта.
Как определить удалённых пользователей и подготовить их к удалению
Первый шаг — понять, кого считать удалённым пользователем. Чаще всего это пользователи с длительным отсутствием активности, например, не заходившие на сайт больше года, или учётные записи с определённым статусом.
Можно использовать следующий SQL-запрос для поиска пользователей, которые не выполняли вход более 365 дней:
SELECT ID, user_login, user_email, user_registered FROM wp_users LEFT JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id WHERE meta_key = 'last_login' AND meta_value < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 365 DAY));Важно: WordPress по умолчанию не хранит дату последнего входа, поэтому для отслеживания логинов нужно заранее установить плагин или добавить собственный код, который будет записывать мета-поле last_login. Вот пример функции для записи времени входа пользователя:
function wplist_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'last_login', time());
}
add_action('wp_login', 'wplist_update_last_login', 10, 2);После накопления данных вы сможете использовать их для фильтрации и удаления устаревших пользователей.
Дополнительные критерии для удаления пользователей
Кроме времени последнего входа, можно учитывать такие параметры, как статус пользователя (например, role = 'subscriber'), наличие заказов, комментариев или публикаций. Это поможет не удалить важные аккаунты.
Рекомендуется создавать резервную копию базы данных перед массовым удалением пользователей.
Как безопасно удалить пользователей через код: пример функции для массового удаления
Для автоматизации удаления можно написать функцию, которая будет удалять пользователей, соответствующих вашим критериям. Ниже пример функции, которая удаляет пользователей с ролью subscriber и не заходивших более года:
function wplist_delete_inactive_subscribers() {
$args = array(
'role' => 'subscriber',
'meta_key' => 'last_login',
'meta_value' => strtotime('-1 year'),
'meta_compare' => '<',
'fields' => 'ID',
'number' => 100
);
$user_query = new WP_User_Query($args);
$users = $user_query->get_results();
if (!empty($users)) {
foreach ($users as $user_id) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}
}Вы можете запускать эту функцию раз в неделю через WP-Cron или вручную, чтобы регулярно очищать базу.
Что делает функция wplist_delete_inactive_subscribers
- Ищет пользователей с ролью
subscriber, у которых мета-полеlast_loginменьше чем год назад. - Удаляет найденных пользователей с помощью стандартной функции
wp_delete_user, которая корректно удаляет все данные, связанные с пользователем.
Использование плагинов для удаления удалённых пользователей
Если вы предпочитаете готовые решения, обратите внимание на плагины, которые помогают управлять пользователями и их удалением:
- Inactive User Deleter — плагин для автоматического удаления неактивных пользователей по заданным параметрам.
- Bulk Delete — мощный инструмент для массового удаления пользователей, записей и метаданных с гибкими условиями.
Эти плагины позволяют настроить фильтры, например, по роли, дате последнего входа и активности, и запускать удаление по расписанию.
Пример настройки Bulk Delete для пользователей
В админке после установки и активации:
- Перейдите в Bulk Delete > Delete Users.
- Выберите фильтр по дате последнего входа, роли пользователя, или другим параметрам.
- Настройте расписание для регулярного запуска задачи.
- Нажмите кнопку «Delete Users» для удаления.
Плагин автоматически удалит пользователей, учитывая зависимости и корректно очистит связанные данные, минимизируя ошибки.
Как избежать ошибок и потери данных при удалении пользователей
Помните следующие рекомендации:
- Перед удалением обязательно сделайте резервную копию базы данных.
- Проверяйте, есть ли у пользователя связанные записи или комментарии, чтобы при необходимости переназначить их другому пользователю.
- Используйте стандартные функции WordPress (
wp_delete_user) — они корректно удаляют все связанные данные. - Тестируйте удаление на тестовом сайте, чтобы убедиться в безопасности процесса.
Также можно использовать дополнительный код для переназначения записей удаляемого пользователя. Пример:
function wplist_reassign_posts_before_delete($user_id, $reassign_id = 1) {
global $wpdb;
$wpdb->update($wpdb->posts, array('post_author' => $reassign_id), array('post_author' => $user_id));
}
function wplist_safe_delete_user($user_id) {
$admin_user_id = 1; // ID администратора для переназначения
wplist_reassign_posts_before_delete($user_id, $admin_user_id);
wp_delete_user($user_id);
}Этот код переназначит все записи пользователя с ID $user_id администратору с ID 1 перед удалением.