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

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

Почему важно автоматизировать управление временными пользователями в WordPress

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

  • Гарантировать удаление просроченных пользователей без участия администратора;
  • Обеспечить быстрый процесс создания временных аккаунтов, например, через форму регистрации или из админки;
  • Оптимизировать безопасность сайта, минимизируя количество активных аккаунтов;
  • Упростить управление доступом и отчетность.

Рассмотрим, как реализовать автоматическое создание и удаление временных пользователей с помощью PHP-кода и плагинов.

Автоматическое создание временного пользователя: пример функции

Для начала создадим функцию, которая будет создавать пользователя с заданным сроком действия. В базе данных мы будем сохранять дату истечения срока в мета-поле пользователя.

function wpedu_create_temporary_user($username, $email, $password, $days_valid = 7) {
    // Проверяем, что пользователь не существует
    if (username_exists($username) || email_exists($email)) {
        return new WP_Error('user_exists', 'Пользователь с таким именем или email уже существует');
    }

    // Создаем пользователя
    $user_id = wp_create_user($username, $password, $email);
    if (is_wp_error($user_id)) {
        return $user_id;
    }

    // Вычисляем дату окончания действия аккаунта
    $expiration_date = date('Y-m-d H:i:s', strtotime("+{$days_valid} days"));

    // Сохраняем дату в мета-поле
    update_user_meta($user_id, 'wpedu_temporary_user_expiration', $expiration_date);

    return $user_id;
}

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

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

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

Регистрация события и хука

Добавим в functions.php или плагин код для регистрации ежедневного события, если оно еще не зарегистрировано:

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

Реализация функции очистки

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

function wpedu_cleanup_temporary_users_function() {
    $args = array(
        'meta_key' => 'wpedu_temporary_user_expiration',
        'meta_value' => current_time('mysql'),
        'meta_compare' => '<=',
        'fields' => 'ID',
    );

    $users = get_users($args);

    foreach ($users as $user_id) {
        wp_delete_user($user_id);
    }
}
add_action('wpedu_cleanup_temporary_users', 'wpedu_cleanup_temporary_users_function');

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

Примеры плагинов для работы с временными пользователями

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

  • Temporary Login Without Password — позволяет создавать временные ссылки для входа с ограниченным сроком и доступом. Однако не удаляет пользователей автоматически.
  • WP User Manager Pro — в расширенной версии есть функции ограничения срока действия аккаунтов.
  • Clearfy Pro — может помочь в оптимизации и управлении пользователями, но для автоматического удаления лучше использовать кастомный код.

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

Расширение функционала: уведомления и ограничения доступа

Уведомление пользователей о скором истечении срока

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

function wpedu_notify_expiring_users() {
    $notify_days = 3; // за сколько дней уведомлять
    $target_date = date('Y-m-d H:i:s', strtotime("+{$notify_days} days"));

    $args = array(
        'meta_key' => 'wpedu_temporary_user_expiration',
        'meta_value' => $target_date,
        'meta_compare' => '<=',
        'fields' => 'all',
    );

    $users = get_users($args);

    foreach ($users as $user) {
        $to = $user->user_email;
        $subject = 'Срок действия вашей учетной записи скоро истечет';
        $message = "Здравствуйте, {$user->display_name}!\nВаша учетная запись на сайте истечет через {$notify_days} дня. Если вы хотите продлить доступ, свяжитесь с администратором.";
        wp_mail($to, $subject, $message);
    }
}
add_action('wpedu_notify_expiring_users_event', 'wpedu_notify_expiring_users');

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

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

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

function wpedu_block_expired_temporary_users($user, $username, $password) {
    if (is_a($user, 'WP_User')) {
        $expiration = get_user_meta($user->ID, 'wpedu_temporary_user_expiration', true);
        if ($expiration && strtotime($expiration) < current_time('timestamp')) {
            return new WP_Error('expired_account', 'Срок действия вашей учетной записи истек. Обратитесь к администратору.');
        }
    }
    return $user;
}
add_filter('authenticate', 'wpedu_block_expired_temporary_users', 30, 3);

Выводы и рекомендации

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

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

⭐⭐⭐⭐⭐