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

Почему важно ограничить удаление пользователей в WordPress

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

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

Перед внедрением ограничений важно понять, кто именно имеет право удалять пользователей. Обычно это администраторы. Проверьте текущие роли и их возможности с помощью плагина User Role Editor или вручную:

function check_user_capabilities() {
    $user = wp_get_current_user();
    error_log(print_r($user->allcaps, true));
}
add_action('init', 'check_user_capabilities');

Это позволит увидеть, есть ли у пользователя право delete_users.

Пошаговое решение: запретить удаление пользователей для определенных ролей

1. Отключаем capability delete_users для роли администратора

Если нужно полностью запретить удаление, можно убрать capability у роли:

function disable_delete_users_capability() {
    $role = get_role('administrator');
    if ($role->has_cap('delete_users')) {
        $role->remove_cap('delete_users');
    }
}
add_action('init', 'disable_delete_users_capability');

2. Запретить удаление определенных пользователей по ID

Иногда нужно запретить удаление ключевых пользователей (например, главного администратора), вне зависимости от роли:

function block_specific_user_deletion($user_id) {
    $forbidden_ids = [1, 2]; // ID пользователей, которых нельзя удалять
    if (in_array($user_id, $forbidden_ids)) {
        wp_die('Удаление этого пользователя запрещено.');
    }
}
add_action('delete_user', 'block_specific_user_deletion');

3. Добавить проверку в админке для скрытия кнопки удаления

Чтобы UX был удобным, удаление можно скрыть через CSS и JavaScript, чтобы администраторы не видели кнопку удаления для защищенных пользователей:

function hide_delete_button_for_protected_users() {
    global $pagenow;
    if ($pagenow === 'users.php') {
        ?>
        <style>
        tr#user-1 .submitdelete, /* для пользователя с ID 1 */
        tr#user-2 .submitdelete {
            display: none !important;
        }
        </style>
        <?php
    }
}
add_action('admin_head', 'hide_delete_button_for_protected_users');

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

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

Частые ошибки и их исправление

  • Удаление все еще доступно несмотря на код: Проверьте приоритет хука и убедитесь, что код подключен в правильном месте (например, в functions.php активной темы или в собственном плагине).
  • Кнопка удаления не скрывается: Проверьте правильность ID пользователей, а также убедитесь, что CSS не переопределяется другими стилями админки.
  • Ошибка при удалении не выводится корректно: Используйте wp_die() с понятным сообщением, чтобы пользователь получил обратную связь.

Практические советы по безопасности и производительности

  • Не удаляйте по умолчанию capability delete_users у роли администратора без крайней необходимости — лучше ограничить удаление конкретных пользователей.
  • Для крупных проектов используйте аудит логов действий (плагин или свой код), чтобы отслеживать попытки удаления пользователей.
  • Регулярно обновляйте WordPress и плагины для снижения рисков уязвимостей, связанных с управлением пользователями.

Сравнение подходов: плагин vs код

МетодПлюсыМинусы
Плагин (например, User Role Editor)Простота настройки, визуальный интерфейс, гибкостьДополнительная нагрузка, возможные конфликты
Код в functions.phpЛегковесность, полный контроль, нет зависимости от сторонних решенийТребует навыков программирования, ошибки могут привести к сбоям

Вам также может быть интересно:

Как отключить REST API для гостей в WordPress без поломки админки и плагинов
04.09.2026
Как добавить логирование и аналитику входа в WordPress без плагинов
02.10.2026
Как установить защиту WordPress от зловредных ботов: практическое руководство
29.09.2026
Как отключить регистрацию в WordPress без плагинов: пошаговое руководство
04.09.2026
Как исправить ошибку 429 Too Many Requests при входе в WordPress
28.09.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше