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

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

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

Неактивные пользователи могут негативно влиять на производительность сайта, усложнять администрирование и создавать потенциальные риски безопасности. Особенно на больших сайтах с регистрацией пользователей, где многие аккаунты создавались давно и не используются. Регулярное удаление таких пользователей помогает:

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

Создание плагина с настройкой периода неактивности

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

Регистрация страницы настроек

Добавим меню и форму для ввода параметра:

<?php
// Регистрируем страницу настроек
function wpkit_register_inactive_users_settings_page() {
    add_options_page(
        'Автоудаление неактивных пользователей',
        'Автоудаление пользователей',
        'manage_options',
        'wpkit-inactive-users',
        'wpkit_inactive_users_settings_page_html'
    );
}
add_action('admin_menu', 'wpkit_register_inactive_users_settings_page');

// Вывод формы настроек
function wpkit_inactive_users_settings_page_html() {
    if (!current_user_can('manage_options')) {
        return;
    }

    // Сохранение настроек
    if (isset($_POST['wpkit_inactive_days'])) {
        check_admin_referer('wpkit_inactive_users_settings');
        $days = intval($_POST['wpkit_inactive_days']);
        update_option('wpkit_inactive_days', $days);
        echo '<div class="updated">Настройки сохранены.</div>';
    }

    $value = get_option('wpkit_inactive_days', 90);
    ?>
    <div class="wrap">
        <h1>Настройка автоудаления неактивных пользователей</h1>
        <form method="post" action="">
            <?php wp_nonce_field('wpkit_inactive_users_settings'); ?>
            <table class="form-table" role="presentation">
                <tr>
                    <th scope="row"><label for="wpkit_inactive_days">Количество дней неактивности</label></th>
                    <td><input name="wpkit_inactive_days" type="number" id="wpkit_inactive_days" value="<?php echo esc_attr($value); ?>" class="small-text" min="1" /></td>
                </tr>
            </table>
            <input type="submit" class="button button-primary" value="Сохранить" />
        </form>
    </div>
    <?php
}

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

Для определения неактивности мы будем использовать дату последнего входа пользователя. По умолчанию WordPress не сохраняет эту информацию, поэтому добавим её с помощью хука wp_login. Затем создадим функцию, которая будет находить и удалять пользователей, не заходивших на сайт дольше заданного периода.

Сохранение даты последнего входа

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

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

function wpkit_delete_inactive_users() {
    $days = get_option('wpkit_inactive_days', 90);
    if (!$days) {
        return;
    }

    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));

    $args = array(
        'meta_key' => 'wpkit_last_login',
        'meta_value' => $date_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100,
        'role__not_in' => array('administrator'),
    );

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

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

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

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

Добавление события в планировщик

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

add_action('wpkit_daily_inactive_users_cleanup', 'wpkit_delete_inactive_users');

Удаление события при деактивации плагина

function wpkit_deactivate_plugin() {
    $timestamp = wp_next_scheduled('wpkit_daily_inactive_users_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpkit_daily_inactive_users_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wpkit_deactivate_plugin');

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

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

Также для повышения безопасности рекомендуется использовать плагины защиты от несанкционированного доступа и ботов, например, WPKit.

Итог

Создание настройки для автоматического удаления неактивных пользователей в WordPress — полезная задача для поддержания здоровья проекта и безопасности. Мы рассмотрели, как добавить админскую страницу для управления периодом неактивности, как сохранять дату последнего входа, как удалять пользователей с помощью WP_User_Query и как автоматизировать процесс через WP-Cron. Такой подход можно адаптировать под свои нужды и интегрировать с другими плагинами.

WooCommerce: автоматическое изменение стоимости товаров при оплате
01.07.2026
Как создать интерактивные формы в WordPress без плагинов
01.12.2025
Как создать автоматическую оптимизацию базы данных WordPress с помощью PHP
19.02.2026
Как создать автоматический импорт из внешнего источника с обработкой ошибок в WordPress
07.04.2026
WooCommerce: как заблокировать оплату при наличии товаров с определёнными атрибутами в корзине
07.06.2026