Как отключить REST API WordPress для определённых пользователей

REST API — мощный инструмент WordPress, позволяющий работать с сайтом через HTTP-запросы. Однако бывают ситуации, когда нужно ограничить к нему доступ для определённых групп пользователей, например, для гостей или ролей с низкими правами. В этой статье подробно разберём, как именно отключить REST API WordPress для выбранных пользователей, рассмотрим примеры кода и советы по безопасности.

Что такое REST API в WordPress и зачем его отключать для некоторых пользователей

REST API предоставляет внешний интерфейс для получения и изменения данных сайта. Многие плагины и темы используют его для динамического обновления контента, интеграций и мобильных приложений.

Но открытый доступ к REST API может стать уязвимостью — злоумышленники могут пытаться получить конфиденциальные данные или перегрузить сайт. Поэтому часто требуется ограничить доступ к REST API, например:

  • отключить для неавторизованных пользователей (гостей);
  • запретить доступ ролям, не имеющим определённых прав;
  • ограничить отдельные эндпоинты API.

Это поможет повысить безопасность и снизить нагрузку на сервер.

Отключаем REST API для неавторизованных пользователей

Самый простой и популярный способ — блокировать REST API для гостей. Для этого добавим в functions.php темы или в отдельный плагин следующий код:

function wp8_disable_rest_api_for_guests($access) {
    if (!is_user_logged_in()) {
        return new WP_Error('rest_forbidden', __('Доступ к REST API ограничен'), array('status' => 401));
    }
    return $access;
}
add_filter('rest_authentication_errors', 'wp8_disable_rest_api_for_guests');

Этот фильтр проверяет, авторизован ли пользователь. Если нет — возвращает ошибку с кодом 401. Таким образом, REST API становится недоступен для гостей, но все залогиненные пользователи по-прежнему могут его использовать.

Пояснения и возможные доработки

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

Отключение REST API для определённых ролей пользователей

Иногда нужно разрешить доступ только администраторам и редакторам, а для остальных ролей — запретить. Для этого изменим функцию:

function wp8_disable_rest_api_for_roles($access) {
    if (!is_user_logged_in()) {
        return new WP_Error('rest_forbidden', __('Доступ к REST API ограничен'), array('status' => 401));
    }

    $user = wp_get_current_user();
    $allowed_roles = array('administrator', 'editor');

    if (array_intersect($allowed_roles, $user->roles)) {
        return $access; // разрешаем
    }

    return new WP_Error('rest_forbidden', __('Доступ к REST API ограничен для вашей роли'), array('status' => 403));
}
add_filter('rest_authentication_errors', 'wp8_disable_rest_api_for_roles');

Здесь мы проверяем роли текущего пользователя и разрешаем доступ только указанным. Остальным — выдаём ошибку 403 Forbidden.

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

Для просмотра ролей используйте функцию wp_get_current_user() и выведите их через print_r() или в отладчике. Добавляйте нужные роли в массив $allowed_roles.

Отключение REST API для определённых эндпоинтов

Иногда нужно закрыть не весь REST API, а только отдельные маршруты. Например, запретить доступ к эндпоинтам пользователей или комментариев.

Для этого можно использовать фильтр rest_endpoints, чтобы удалять нежелательные маршруты.

function wp8_restrict_rest_endpoints($endpoints) {
    // Удаляем эндпоинты пользователей
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
        unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
    }

    // Удаляем эндпоинты комментариев
    if (isset($endpoints['/wp/v2/comments'])) {
        unset($endpoints['/wp/v2/comments']);
    }

    return $endpoints;
}
add_filter('rest_endpoints', 'wp8_restrict_rest_endpoints');

Этот код удаляет маршруты пользователей и комментариев из REST API, делая их недоступными для всех.

Как проверить, какие эндпоинты есть на сайте

Чтобы увидеть все REST маршруты, откройте в браузере https://ваш-сайт.ru/wp-json/. Там будет список всех доступных эндпоинтов. По ним можно ориентироваться для удаления.

Использование плагинов для управления доступом к REST API

Если хотите упростить работу, есть готовые плагины, например:

  • Clearfy Pro — в ней есть удобные настройки для блокировки REST API по ролям и другим критериям;
  • WPCommunity — если вы строите социальную сеть, плагин позволяет гибко настраивать доступ к API;
  • WPRemark — с точки зрения отзывов, можно ограничить доступ к REST API для анонимных комментаторов.

Плагины подходят, если не хотите писать код или нужна расширенная настройка с UI.

Советы по безопасности и тестированию после ограничений REST API

После внесения изменений обязательно протестируйте работу сайта и интеграций. Некоторые темы и плагины используют REST API для динамических функций, и их работа может быть нарушена.

Для отладки используйте инструменты браузера (вкладка Network) и плагины отладки REST API, например REST API Console.

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

Выводы

Отключение REST API для определённых пользователей — важная задача для повышения безопасности и оптимизации работы сайта. Варианты решения:

  • блокировка для гостей через фильтр rest_authentication_errors;
  • ограничение по ролям с проверкой текущего пользователя;
  • удаление отдельных эндпоинтов через rest_endpoints;
  • использование готовых плагинов (Clearfy Pro, WPCommunity и др.) для гибкой настройки.

Применяйте подход, максимально подходящий под ваш проект, и не забывайте тестировать функциональность после изменений.

Как создать многоуровневое меню в WordPress с помощью плагинов и кода
08.09.2026
Как удалить кеш и оптимизировать WordPress без плагинов
08.09.2026
Как настроить автоматическое сохранение записей в WordPress через плагин
08.09.2026
Как убрать дубли страниц из индексации в WordPress
10.09.2026
Оптимизация отображения контента для разных пользователей в WordPress
08.09.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »