wpinc.ru wordpress WP Inc

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

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

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

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

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

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

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

Самый простой способ — использовать плагин WP Last Login. Он добавляет мета поле с датой последнего входа для каждого пользователя. После установки и активации плагина вы сможете получить дату последнего входа через get_user_meta($user_id, 'last_login', true).

Если хочется реализовать это самостоятельно, добавим хук на событие авторизации:

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

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

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

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

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

function wpinc_delete_inactive_users() {
    $threshold = strtotime('-180 days');
    $args = [
        'meta_key' => 'wpinc_last_login',
        'meta_value' => date('Y-m-d H:i:s', $threshold),
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 1000
    ];

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

    if (!empty($users)) {
        foreach ($users as $user_id) {
            // Не удаляем администраторов
            if (!user_can($user_id, 'administrator')) {
                wp_delete_user($user_id);
            }
        }
    }
}

Вы можете запускать эту функцию периодически с помощью WP-Cron, например, один раз в неделю:

if (!wp_next_scheduled('wpinc_cron_delete_inactive_users')) {
    wp_schedule_event(time(), 'weekly', 'wpinc_cron_delete_inactive_users');
}
add_action('wpinc_cron_delete_inactive_users', 'wpinc_delete_inactive_users');
<

Использование плагинов для автоматизации очистки пользователей

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

  • Inactive User Deleter — бесплатный плагин, который удаляет пользователей, не входивших в систему за заданный период. Позволяет исключить администраторов и выбрать роли пользователей для удаления.
  • Remove Inactive Users — плагин с гибкими настройками, который автоматически удаляет неактивных пользователей и отправляет уведомления.

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

Рекомендации и предостережения при автоматическом удалении пользователей

Перед тем, как запускать автоматическое удаление, рекомендую:

  • Всегда создавать резервные копии базы данных.
  • Исключать из удаления пользователей с особыми правами, например, администраторов.
  • Проводить тестирование на тестовом сайте, чтобы убедиться, что логика работает корректно.
  • Сообщать пользователям о возможном удалении их аккаунта, например, за месяц до удаления.

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

Пример интеграции с плагином WPGPT для уведомлений

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

function wpinc_notify_user_before_delete($user_id) {
    $user = get_userdata($user_id);
    $email = $user->user_email;
    $message = "Здравствуйте, {$user->display_name}! \n\nВаш аккаунт будет удален через 7 дней из-за длительной неактивности. Если вы хотите сохранить аккаунт, пожалуйста, войдите на сайт.";

    // Используем WPGPT для генерации письма (пример условный)
    if (function_exists('wpgpt_send_email')) {
        wpgpt_send_email($email, 'Уведомление об удалении аккаунта', $message);
    }
}

add_action('wpinc_before_delete_user', 'wpinc_notify_user_before_delete');

В этом примере перед вызовом wp_delete_user() можно вызвать хук do_action('wpinc_before_delete_user', $user_id);, чтобы уведомить пользователя.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙