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

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

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

Удаление неактивных пользователей помогает:

  • Уменьшить размер базы данных и повысить производительность сайта.
  • Снизить риски безопасности — заброшенные аккаунты могут быть взломаны.
  • Поддерживать актуальную базу подписчиков и пользователей.
  • Упростить администрирование и аналитику.

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

Что мы будем делать: пошаговый план

  1. Определим, что считать неактивным пользователем (например, не заходил 6 месяцев).
  2. Создадим функцию удаления таких пользователей.
  3. Добавим cron задачу, чтобы запускать эту функцию регулярно.
  4. Добавим безопасность и логи.

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

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

Добавляем запись времени последнего входа

Используем хук wp_login, который вызывается при авторизации:

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

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

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

Создадим функцию, которая будет искать пользователей, у которых last_login старше 6 месяцев, и удалять их.

function wpaddons_delete_inactive_users() {
    $threshold = date('Y-m-d H:i:s', strtotime('-6 months'));

    $args = [
        'meta_key'     => 'last_login',
        'meta_value'   => $threshold,
        '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);
        }
    }
}

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

Настройка cron задачи для регулярного запуска

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

add_action('wpaddons_daily_delete_inactive_users', 'wpaddons_delete_inactive_users');

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

Так мы гарантируем, что задача запускается ежедневно.

Добавление логирования и безопасности

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

function wpaddons_delete_inactive_users() {
    $threshold = date('Y-m-d H:i:s', strtotime('-6 months'));
    $args = [
        'meta_key'     => 'last_login',
        'meta_value'   => $threshold,
        'meta_compare' => '<',
        'fields'       => ['ID'],
        'number'       => 100,
    ];

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

    if (!empty($users)) {
        foreach ($users as $user_id) {
            require_once ABSPATH . 'wp-admin/includes/user.php';
            if (wp_delete_user($user_id)) {
                $count++;
            }
        }
    }

    $log = sprintf("[%s] Deleted %d inactive users\n", date('Y-m-d H:i:s'), $count);
    error_log($log, 3, WP_CONTENT_DIR . '/inactive-users.log');
}

Лог будет храниться в файле wp-content/inactive-users.log, что удобно для проверки.

Дополнительные рекомендации и плагины

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

  • Clearfy Pro — содержит функции для оптимизации пользователей и автоматизации.
  • WPRemark — плагин управления пользователями с расширенными возможностями.

При использовании плагинов внимательно читайте документацию и делайте резервные копии.

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

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

Создание автоматического отзыва на формы обращений в WordPress
25.12.2025
WooCommerce: автоматическое изменение стоимости товаров при изменении условий в корзине
28.05.2026
Как автоматически удалять неактивных пользователей WordPress с помощью cron задач
18.03.2026
Автоматическое удаление неиспользуемых плагинов в WordPress
04.03.2026
WooCommerce: автоматическое отключение плагинов по условиям корзины
01.06.2026