Как удалить по умеренному варианту неактивных пользователей в WordPress

Диагностика: почему нужно удалять неактивных пользователей

Неактивные пользователи в базе WordPress могут создавать нагрузку на сервер и увеличивать размер базы данных. Особенно это критично для сайтов с регистрацией и магазином на WooCommerce, когда у вас сотни или тысячи пользователей, которые давно не заходили и не совершали действия.

Чтобы проверить количество неактивных пользователей, используйте SQL-запрос в phpMyAdmin или через WP-CLI:

SELECT ID, user_login, user_registered, last_login FROM wp_users LEFT JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id AND wp_usermeta.meta_key = 'last_login' WHERE last_login < DATE_SUB(NOW(), INTERVAL 1 YEAR) OR last_login IS NULL;

Обратите внимание, что по умолчанию WordPress не сохраняет время последнего входа, поэтому для работы с last_login нужно предварительно внедрить этот механизм (например, через плагин или добавить код).

Как отслеживать последний вход пользователя

Добавим в functions.php код для сохранения времени последнего входа:

add_action('wp_login', function($user_login, $user) {
    update_user_meta($user->ID, 'last_login', current_time('mysql'));
}, 10, 2);

После этого в usermeta будет храниться мета-ключ last_login с датой последнего входа пользователя.

Пошаговое решение: удаление неактивных пользователей

Шаг 1. Сделайте резервную копию базы данных.

Шаг 2. Добавьте код для удаления пользователей, которые не заходили более года:

function delete_inactive_users($days = 365) {
    global $wpdb;
    $date_limit = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'last_login' AND meta_value < %s",
        $date_limit
    ));

    if (empty($user_ids)) {
        return 0;
    }

    require_once(ABSPATH . 'wp-admin/includes/user.php');
    foreach ($user_ids as $user_id) {
        wp_delete_user($user_id);
    }
    return count($user_ids);
}

// Запуск удаления
$deleted = delete_inactive_users(365);
echo "Удалено пользователей: $deleted";

Этот код берет user_id пользователей с последним логином старше 365 дней и удаляет их через стандартную функцию wp_delete_user(), которая корректно очищает данные.

Проверка результата после внедрения

  • Запустите функцию удаления и убедитесь, что количество удаленных пользователей соответствует ожиданиям.
  • Проверьте базу данных, выполнив SQL-запрос для поиска пользователей с last_login старше года — их не должно остаться.
  • Проверьте работу сайта, особенно если есть зависимости от пользователей (например, заказы WooCommerce).

Частые ошибки и как их исправить

  • Отсутствует мета-ключ last_login: без этого кода вы не сможете отфильтровать пользователей по дате последнего входа. Добавьте код отслеживания последнего входа.
  • Удаление пользователей с заказами WooCommerce: если удалять пользователей, у которых есть заказы, это может привести к потере связей. Проверьте перед удалением:
function can_delete_user($user_id) {
    $orders = wc_get_orders(array('customer' => $user_id, 'limit' => 1));
    return empty($orders);
}

И фильтруйте список пользователей по этому условию.

  • Удаление происходит без резервной копии: всегда делайте бэкап перед массовыми удалениями.
  • Неверный формат даты: убедитесь, что current_time('mysql') и сравнения в SQL совпадают по формату.

Практические советы по безопасности и производительности

  • Используйте WP-Cron для регулярного запуска удаления неактивных пользователей, например, раз в месяц.
  • Обязательно проверяйте наличие заказов и других зависимостей перед удалением.
  • Для сайтов с большим количеством пользователей используйте пакетную обработку, чтобы не перегружать сервер.
  • Записывайте логи удаления для контроля.
  • Используйте плагин Clearfy (https://wpshop.ru/plugins/clearfy?utm_source=wplog.ru&utm_medium=article&utm_campaign=kak-udalit-po-umerennomu-variantu-neaktivnye-polzovateli-v-wordpress) для оптимизации базы и удаления мусорных данных.

Сравнение вариантов удаления неактивных пользователей

МетодПлюсыМинусыРекомендации
Ручной SQL-запросБыстро и напрямуюРиск удаления без проверки зависимостейИспользовать только с резервной копией
Код на PHP с wp_delete_user()Корректное удаление с очисткой данныхТребует программированияОптимально для автоматизации
Плагины очистки (Clearfy и др.)Удобно, готовые функцииМогут быть платнымиПодходит для регулярного обслуживания
Как автоматически удалять неиспользуемые медиафайлы в WordPress
04.01.2026
Добавление уникальных полей в формы WordPress: подробное руководство
28.01.2026
Как добавить автоматическое отправление сообщений в контактной форме WordPress
07.04.2026
Как автоматически удалять старые черновики в WordPress
16.01.2026
Как сделать собственный виджет в WordPress с примером кода
07.12.2025