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

Почему важно удалять неактивных пользователей WordPress

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

Автоматическое удаление пользователей, которые не заходили на сайт более 30 дней, поможет поддерживать базу пользователей в актуальном состоянии, улучшить безопасность и оптимизировать работу сайта.

В этой статье мы рассмотрим, как реализовать такую функцию с помощью собственного кода и обсудим, какие плагины помогут упростить задачу.

Как определить неактивного пользователя: критерии и способы

Для автоматического удаления необходимо четко определить, кто считается неактивным пользователем. Обычно используют следующие критерии:

  • Дата последнего входа – если пользователь не заходил на сайт более 30 дней.
  • Дата регистрации – если пользователь зарегистрировался, но никогда не входил.
  • Роль пользователя – можно исключить администраторов или редакторов из удаления.

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

Отслеживание даты последнего входа

Добавим функцию, которая будет сохранять дату каждого входа пользователя в метаданные:

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

Этот код добавляет или обновляет мета ключ wpinfo_last_login с текущей датой и временем при каждом входе пользователя.

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

Теперь напишем функцию, которая будет искать пользователей, не заходивших больше 30 дней, и удалять их. Исключим из удаления администраторов.

function wpinfo_delete_inactive_users() {
    $args = array(
        'meta_key'     => 'wpinfo_last_login',
        'meta_value'   => date('Y-m-d H:i:s', strtotime('-30 days')),
        'meta_compare' => '<',
        'role__not_in' => array('administrator'),
        'fields'       => 'ID'
    );

    $user_query = new WP_User_Query( $args );
    $users_to_delete = $user_query->get_results();

    if ( ! empty( $users_to_delete ) ) {
        foreach ( $users_to_delete as $user_id ) {
            wp_delete_user( $user_id );
        }
    }
}

Эта функция находит пользователей с датой последнего входа раньше 30 дней назад и удаляет их, кроме администраторов.

Обработка пользователей без даты входа

Если пользователь никогда не входил, метаданные wpinfo_last_login будут отсутствовать. Можно добавить дополнительный запрос для удаления таких пользователей, если они зарегистрированы более 30 дней назад:

function wpinfo_delete_never_logged_in_users() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));

    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->users WHERE user_registered < %s",
        $date_threshold
    ));

    foreach ($user_ids as $user_id) {
        $last_login = get_user_meta($user_id, 'wpinfo_last_login', true);
        $user = get_userdata($user_id);
        if (empty($last_login) && !in_array('administrator', $user->roles)) {
            wp_delete_user($user_id);
        }
    }
}

Автоматизация удаления через WP-Cron

Чтобы удалять пользователей регулярно, добавим задачу в WP-Cron, которая будет запускать удаление раз в сутки.

function wpinfo_schedule_user_cleanup() {
    if ( ! wp_next_scheduled( 'wpinfo_daily_user_cleanup' ) ) {
        wp_schedule_event( time(), 'daily', 'wpinfo_daily_user_cleanup' );
    }
}
add_action( 'wp', 'wpinfo_schedule_user_cleanup' );

add_action( 'wpinfo_daily_user_cleanup', 'wpinfo_delete_inactive_users' );
add_action( 'wpinfo_daily_user_cleanup', 'wpinfo_delete_never_logged_in_users' );

Этот код регистрирует ежедневное событие, вызывающее функции удаления неактивных и никогда не заходивших пользователей.

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

Если вы предпочитаете готовые решения, рассмотрите плагины, которые автоматизируют управление неактивными пользователями:

  • Inactive User Deleter — позволяет настроить удаление пользователей по времени без кастомного кода.
  • Clearfy Pro — комплексный плагин для оптимизации WordPress, включая функции управления пользователями.

Преимущество собственного кода — гибкость и возможность тонкой настройки под конкретный проект. Плагины же экономят время и подходят для большинства сайтов.

Как обеспечить безопасность и избежать случайного удаления

Удаление пользователей — операция, требующая осторожности. Рекомендуется:

  • Исключать из удаления пользователей с важными ролями (администраторы, редакторы).
  • Делать резервные копии базы данных перед настройкой автоматического удаления.
  • Тестировать функции на тестовом сайте, чтобы убедиться в корректности работы.

Также можно добавить уведомления администратору перед удалением или отправлять письмо пользователю с предупреждением.

Пример уведомления перед удалением

function wpinfo_notify_inactive_users() {
    $args = array(
        'meta_key'     => 'wpinfo_last_login',
        'meta_value'   => date('Y-m-d H:i:s', strtotime('-27 days')),
        'meta_compare' => '<',
        'role__not_in' => array('administrator'),
        'fields'       => 'ID'
    );

    $user_query = new WP_User_Query( $args );
    $users = $user_query->get_results();

    foreach ($users as $user_id) {
        $user = get_userdata($user_id);
        wp_mail($user->user_email, 'Ваш аккаунт будет удален', 'Вы не заходили на сайт 27 дней. Через 3 дня аккаунт будет удален.');
    }
}
add_action('wpinfo_daily_user_cleanup', 'wpinfo_notify_inactive_users', 5);

Этот код отправляет уведомления за 3 дня до удаления.

Итоги и рекомендации

Автоматическое удаление забытых пользователей в WordPress — важная задача для поддержания чистоты базы данных и безопасности сайта. Используя приведенные функции и советы, вы сможете настроить надежный механизм очистки.

Если хотите упростить задачу, воспользуйтесь плагинами, например, Clearfy Pro, который обладает широким функционалом для оптимизации WordPress.

Регулярно проверяйте работу скриптов и создавайте резервные копии — это поможет избежать потери данных и обеспечит стабильность вашего сайта.

Как добавить автоматические уведомления о обновлениях тем и плагинов в WordPress
17.04.2026
WooCommerce: как автоматически изменить стоимость товара при регистрации пользователя
29.05.2026
WordPress: устройство, настройка и оптимизация очистки базы данных
30.01.2026
WooCommerce: исключение товаров из определённых категорий из поиска
21.04.2026
WooCommerce: как отключить отзывы для определённых товаров
24.04.2026