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

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

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

Неактивные пользователи могут создавать риски безопасности — например, если их аккаунты взломают, злоумышленники смогут получить доступ к сайту. Кроме того, большое количество неактивных пользователей затрудняет управление, а база данных растёт без пользы, замедляя работу сайта.

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

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

Прежде чем создавать код или использовать плагин, определите критерии, по которым пользователь считается неактивным. Самые распространённые варианты:

  • Дата последнего входа на сайт (login).
  • Дата последнего обновления профиля.
  • Отсутствие активности за определённый период (например, 6 месяцев или год).

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

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

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

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

Этот код обновляет метаданные wpunit_last_login при каждом входе пользователя. Дату удобно хранить в формате MySQL для последующих сравнений.

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

Теперь создадим функцию, которая будет находить пользователей с датой последнего входа старше заданного периода и удалять их. Для запуска используем WP-Cron.

function wpunit_delete_inactive_users() {
    $threshold = date('Y-m-d H:i:s', strtotime('-180 days')); // 180 дней назад

    $args = array(
        'meta_key'     => 'wpunit_last_login',
        'meta_value'   => $threshold,
        'meta_compare' => '<',
        'fields'       => 'ID',
        'number'       => 50 // количество за раз
    );

    $users = get_users( $args );

    foreach ( $users as $user_id ) {
        wp_delete_user( $user_id );
    }
}

// Планируем событие, если оно не запланировано
if ( ! wp_next_scheduled( 'wpunit_cron_delete_inactive_users' ) ) {
    wp_schedule_event( time(), 'daily', 'wpunit_cron_delete_inactive_users' );
}

add_action( 'wpunit_cron_delete_inactive_users', 'wpunit_delete_inactive_users' );

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

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

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

function wpunit_delete_inactive_users() {
    $threshold = date('Y-m-d H:i:s', strtotime('-180 days'));

    $args = array(
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key'     => 'wpunit_last_login',
                'value'   => $threshold,
                'compare' => '<'
            ),
            array(
                'key'     => 'wpunit_last_login',
                'compare' => 'NOT EXISTS'
            ),
        ),
        'date_query' => array(
            array(
                'column' => 'user_registered',
                'before' => $threshold,
            ),
        ),
        'fields' => 'ID',
        'number' => 50,
    );

    $users = get_users( $args );

    foreach ( $users as $user_id ) {
        wp_delete_user( $user_id );
    }
}

Так мы учитываем и тех, у кого отсутствует информация о последнем входе, но дата регистрации давно.

Использование плагинов для удаления неактивных пользователей

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

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

При использовании плагинов важно внимательно настроить параметры, чтобы не удалить нужных пользователей.

Рекомендации по безопасности и резервному копированию

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

Также рекомендуется уведомлять пользователей о предстоящем удалении аккаунтов из-за неактивности, чтобы они могли своевременно войти и сохранить свой доступ.

Заключение

Автоматическое удаление неактивных пользователей — эффективный способ поддерживать WordPress-сайт в порядке. Используя собственные функции и WP-Cron, вы можете гибко настроить процесс под свои задачи. Если хотите упростить работу — рассмотрите качественные плагины, например, Clearfy Pro. Главное — внимательно тестировать и создавать резервные копии.

Как удалить заказ WooCommerce без удаления пользователя
24.05.2026
Как автоматически проверять здоровье сайта WordPress с помощью WPUnit
16.04.2026
Как автоматизировать удаление старых категорий в WordPress
12.03.2026
Как создать автоматический импорт из Telegram в WordPress с помощью WPUnit
26.03.2026
Как создать автоматическое отключение плагинов при конфликтах в WordPress
04.04.2026