wpcodes.ru wordpress WP Codеs

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

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

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

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

  • Безопасность: Старые аккаунты с слабыми паролями — мишень для хакеров.
  • Производительность: Большое количество пользователей замедляет работу админ-панели и увеличивает нагрузку на базу данных.
  • Аналитика: Искажение данных о вовлеченности и активности.

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

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

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

Как добавить отслеживание последнего входа пользователя

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

function wpcodes_save_last_login($login) {
    $user = get_user_by('login', $login);
    if ($user) {
        update_user_meta($user->ID, 'wpcodes_last_login', current_time('mysql'));
    }
}
add_action('wp_login', 'wpcodes_save_last_login');

Этот код сохраняет дату и время входа пользователя в формате MySQL DATETIME в метаполе wpcodes_last_login.

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

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

function wpcodes_delete_inactive_users() {
    $days_inactive = 180; // Порог неактивности в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));

    $args = array(
        'meta_key' => 'wpcodes_last_login',
        'meta_value' => $date_threshold,
        'meta_compare' => '&lt=',
        'fields' => 'ID',
        'number' => -1,
    );

    $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) {
            // Исключаем администратора с ID 1
            if ($user_id != 1) {
                wp_delete_user($user_id);
            }
        }
    }
}

// Запуск функции через wp_cron или вручную
// wpcodes_delete_inactive_users();

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

Как автоматизировать запуск удаления по расписанию

Чтобы удаление выполнялось автоматически, добавим вызов функции в планировщик WordPress (wp_cron):

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

add_action('wpcodes_cron_delete_inactive_users', 'wpcodes_delete_inactive_users');

Этот код запускает удаление раз в день. Вы можете изменить период, заменив 'daily' на 'weekly' или 'hourly' по необходимости.

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

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

  • Inactive User Deleter — позволяет настроить порог неактивности и автоматически удалять пользователей. Можно настроить уведомления перед удалением.
  • WP Bulk Delete — мощный инструмент для массового удаления пользователей по различным критериям, включая дату последнего входа.

Для интеграции с плагинами из WPShop.ru можно использовать, например, Clearfy Pro, который помогает управлять безопасностью и оптимизацией сайта, в том числе и пользователями.

Пример настройки Clearfy Pro для безопасности пользователей

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

Безопасность и резервное копирование перед удалением

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

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

Можно добавить отправку уведомления, если нужно предупредить пользователя о предстоящем удалении. Например, по email за 7 дней до удаления.

Расширенные возможности: удаление по ролям и активности

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

$args = array(
    'role' => 'subscriber',
    'meta_key' => 'wpcodes_last_login',
    'meta_value' => $date_threshold,
    'meta_compare' => '&lt=',
    'fields' => 'ID',
    'number' => -1,
);

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

Удаление пользователей с пустой датой последнего входа

Если пользователь никогда не входил, поле wpcodes_last_login будет отсутствовать. Чтобы удалить таких пользователей, добавим отдельный запрос:

$args_no_login = array(
    'meta_query' => array(
        array(
            'key' => 'wpcodes_last_login',
            'compare' => 'NOT EXISTS',
        ),
    ),
    'fields' => 'ID',
    'number' => -1,
);
$user_query_no_login = new WP_User_Query($args_no_login);
$users_to_delete_no_login = $user_query_no_login->get_results();

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

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

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

Если вы хотите более гибкое и масштабируемое решение, рассмотрите использование готовых плагинов, например, WP Bulk Delete или Inactive User Deleter с WPShop.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее