В некоторых проектах на 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. Такой подход позволяет реализовать гибкое и надежное решение под конкретные задачи.