В администрировании WordPress часто возникает задача очистить базу пользователей от заблокированных аккаунтов. Такие пользователи могут быть созданы ботами или оставлены после блокировки за нарушение правил. Удаление заблокированных пользователей вручную неудобно и долго, особенно если их много. В этой статье рассмотрим, как автоматизировать этот процесс с помощью PHP-кода, который можно добавить в functions.php вашей темы или в отдельный плагин.
Что такое заблокированные пользователи в WordPress и как их определить
WordPress по умолчанию не имеет встроенного статуса «заблокированный пользователь». Поэтому под «заблокированными» обычно понимают пользователей с определённым пользовательским мета-полем, ролью, статусом или флагом, который администратор выставил для блокировки. Например, часто для блокировки вручную меняют роль пользователя на blocked, или добавляют мета-поле is_blocked со значением true.
Пример определения заблокированных пользователей:
- Роль пользователя —
blocked - Пользовательское мета-поле:
blocked=1илиtrue - Пользователь внесён в специальный список или таблицу
В этой статье рассмотрим вариант с мета-полем blocked, так как он универсален и легко внедряется.
Пошаговое решение: удаление заблокированных пользователей по мета-полю
Чтобы удалить всех пользователей с мета-полем blocked равным 1, можно использовать WP_User_Query для выборки и функцию wp_delete_user() для удаления.
Шаг 1. Выборка заблокированных пользователей
Используем WP_User_Query с параметром meta_query:
function wpmanual_get_blocked_users() {
$args = array(
'meta_key' => 'blocked',
'meta_value' => '1',
'fields' => 'ID',
'number' => 100, // количество на один проход
);
$user_query = new WP_User_Query($args);
return $user_query->get_results();
}
Функция вернёт массив ID пользователей с мета-полем blocked=1.
Шаг 2. Удаление пользователей по ID
Для удаления используем wp_delete_user(). Важно помнить, что удаление без переназначения контента удалит все записи пользователя. Если хотите сохранить записи, можно указать ID другого пользователя для переназначения.
function wpmanual_delete_blocked_users() {
$blocked_users = wpmanual_get_blocked_users();
foreach ($blocked_users as $user_id) {
// Передаем null, чтобы удалить все записи пользователя
wp_delete_user($user_id, null);
}
}
Шаг 3. Автоматизация удаления через WP-Cron
Чтобы регулярно удалять заблокированных пользователей, можно настроить событие WP-Cron. Например, запускать очистку раз в неделю.
function wpmanual_schedule_blocked_users_cleanup() {
if (!wp_next_scheduled('wpmanual_blocked_users_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpmanual_blocked_users_cleanup_hook');
}
}
add_action('wp', 'wpmanual_schedule_blocked_users_cleanup');
add_action('wpmanual_blocked_users_cleanup_hook', 'wpmanual_delete_blocked_users');
Так очистка будет происходить автоматически и не потребует вашего вмешательства.
Дополнительные советы: как безопасно работать с удалением пользователей
Удаление пользователей — операция необратимая, поэтому необходимо соблюдать меры предосторожности:
- Перед удалением сделайте резервную копию базы данных.
- Тестируйте код на тестовом сайте.
- Добавьте логирование удалённых пользователей для контроля.
- При необходимости переназначайте контент другому пользователю, чтобы не потерять записи.
Пример логирования удалённых пользователей:
function wpmanual_delete_blocked_users_with_log() {
$blocked_users = wpmanual_get_blocked_users();
foreach ($blocked_users as $user_id) {
error_log("WPManual: deleting blocked user ID: " . $user_id);
wp_delete_user($user_id, null);
}
}
Использование плагина Clearfy Pro для управления заблокированными пользователями
Если вы предпочитаете готовые инструменты, обратите внимание на плагин Clearfy Pro. Он позволяет расширенно управлять пользователями, в том числе быстро блокировать и удалять нежелательных посетителей без необходимости писать код.
Clearfy Pro имеет удобный интерфейс для массовых операций и автоматизации, что значительно упрощает администрирование сайта.
Заключение
Удаление заблокированных пользователей в WordPress — задача, которую можно эффективно решить с помощью кода. Использование мета-полей для пометки блокировки и функций WP_User_Query и wp_delete_user позволяет создавать гибкие и автоматизированные решения. При необходимости интегрируйте такой код с WP-Cron для регулярной очистки базы. Для тех, кто предпочитает GUI, плагин Clearfy Pro станет отличным помощником.
Таким образом, вы содержите базу пользователей в порядке, повышаете безопасность и снижаете нагрузку на сайт.