В крупных WordPress-сайтах сообщество пользователей со временем разрастается, и часть из них становится неактивной — не заходят на сайт месяцами или даже годами. Наличие большого числа неактивных пользователей может негативно сказываться на производительности базы данных, создавать лишнюю нагрузку и мешать управлению сайтом.
В этой статье разберём, как эффективно и безопасно удалить неактивных пользователей WordPress с помощью собственного PHP-скрипта и готовых плагинов. Также рассмотрим, как автоматизировать этот процесс и минимизировать риски случайного удаления важных аккаунтов.
Почему важно удалять неактивных пользователей WordPress
Со временем количество пользователей может вырасти до тысяч, особенно на сайтах с регистрацией и форумами. Неактивные аккаунты:
- Загромождают базу данных, увеличивая её размер.
- Усложняют администрирование и поиск нужных пользователей.
- Повышают риски безопасности, если пароли устарели, а пользователи забыли о своих аккаунтах.
Регулярная очистка от неактивных пользователей помогает поддерживать порядок и безопасность на сайте.
Как определить неактивных пользователей WordPress
Стандартная таблица wp_users содержит дату регистрации, но не хранит информацию о последнем входе пользователя. Для того чтобы отследить активность, необходимо добавить хранение времени последнего логина. Это можно сделать с помощью плагина или самостоятельно, внедрив код, который будет записывать дату последнего входа в метаданные пользователя.
Добавление мета-поля с датой последнего входа
Пример кода для записи времени последнего входа пользователя в метаданные, который нужно добавить в файл functions.php вашей темы или в плагин:
function wpcore_update_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'wpcore_last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wpcore_update_last_login', 10, 2 );Этот хук срабатывает при входе пользователя и обновляет мета-значение wpcore_last_login.
Скрипт для удаления неактивных пользователей
После того, как у пользователей есть мета-данные с датой последнего входа, можно написать скрипт, который удалит тех, кто не заходил на сайт, например, более 6 месяцев.
function wpcore_delete_inactive_users( $months = 6 ) {
$date_threshold = date('Y-m-d H:i:s', strtotime("-" . intval($months) . " months"));
$args = array(
'meta_key' => 'wpcore_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'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 ) {
// Исключаем администраторов
if ( ! user_can( $user_id, 'administrator' ) ) {
wp_delete_user( $user_id );
}
}
}
}Этот код ищет пользователей, у которых дата последнего входа старше 6 месяцев, и удаляет их, кроме администраторов.
Как запустить скрипт вручную и по расписанию
Для запуска вручную достаточно вызвать функцию:
wpcore_delete_inactive_users();Чтобы запускать её автоматически, можно добавить задание Cron:
function wpcore_schedule_user_cleanup() {
if ( ! wp_next_scheduled( 'wpcore_daily_user_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpcore_daily_user_cleanup' );
}
}
add_action( 'wp', 'wpcore_schedule_user_cleanup' );
add_action( 'wpcore_daily_user_cleanup', function() {
wpcore_delete_inactive_users( 6 );
} );Этот код настроит ежедневный запуск удаления неактивных пользователей старше 6 месяцев.
Готовые плагины для удаления неактивных пользователей WordPress
Если не хочется писать код, можно использовать плагины. Вот несколько популярных и проверенных решений:
- Inactive User Deleter — плагин, который автоматически удаляет пользователей, неактивных в течение заданного времени. Позволяет исключать роли и пользователей.
- Last Login — с его помощью можно отслеживать дату последнего входа, а потом на основе этой информации очищать базу вручную или с помощью другого плагина.
- WP User Manager — комплексный плагин для управления пользователями, в том числе с функциями очистки и фильтрации.
Для интеграции с плагинами WPSHOP можно добавить мета-поле wpcore_last_login в списки пользователей, чтобы улучшить контроль.
Рекомендации по безопасности и резервному копированию
Перед удалением пользователей обязательно сделайте резервную копию базы данных. Это позволит восстановить данные в случае ошибки.
Также рекомендуется:
- Исключать из удаления администраторов и ключевых пользователей.
- Добавлять подтверждение или отчёты о том, сколько пользователей будет удалено.
- Проводить удаление в неактивное время, чтобы минимизировать влияние на сайт.
Пример функции для вывода количества пользователей к удалению
function wpcore_count_inactive_users( $months = 6 ) {
$date_threshold = date('Y-m-d H:i:s', strtotime("-" . intval($months) . " months"));
$args = array(
'meta_key' => 'wpcore_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => -1,
);
$user_query = new WP_User_Query( $args );
$users = $user_query->get_results();
$count = 0;
if ( !empty( $users ) ) {
foreach ( $users as $user_id ) {
if ( ! user_can( $user_id, 'administrator' ) ) {
$count++;
}
}
}
return $count;
}Вы можете вывести на страницу админки количество пользователей, которых планируете удалить, чтобы принять взвешенное решение.
Вывод
Удаление неактивных пользователей — важный этап поддержки и оптимизации WordPress-сайта. Реализовать это можно как вручную с помощью кода, так и с помощью плагинов. Важно предварительно отслеживать дату последнего входа, чтобы не удалять активных пользователей, а также всегда создавать бэкапы перед массовыми удалениями.
Если хотите гибко управлять пользователями и автоматизировать процессы, советую обратить внимание на плагины из WPSHOP, которые могут расширить функционал вашего сайта.