Как отключить REST API в WordPress без плагинов

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

Что такое REST API и зачем его отключать

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

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

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

Как полностью отключить REST API в WordPress без плагинов

Для полной деактивации REST API можно использовать фильтр rest_authentication_errors, который позволяет прервать доступ к API, возвращая ошибку авторизации.

Пример функции для отключения REST API

function wpkeys_disable_rest_api($access) {
    if (!is_user_logged_in()) {
        return new WP_Error('rest_disabled', 'REST API отключен на этом сайте.', array('status' => 403));
    }
    return $access;
}
add_filter('rest_authentication_errors', 'wpkeys_disable_rest_api');

Данная функция проверяет, авторизован ли пользователь. Если нет — API не работает и возвращается ошибка 403. Это самый безопасный способ ограничить доступ без полного удаления API.

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

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

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

function wpkeys_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+)']);
    }
    return $endpoints;
}
add_filter('rest_endpoints', 'wpkeys_restrict_rest_endpoints');

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

Отключение REST API для гостей, но разрешение для администраторов

Часто требуется, чтобы REST API был доступен только администраторам и другим залогиненным пользователям, но закрыт для всех остальных.

Пример кода

function wpkeys_disable_rest_api_for_guests($access) {
    if (!is_user_logged_in() || !current_user_can('manage_options')) {
        return new WP_Error('rest_forbidden', 'Доступ к REST API разрешен только администраторам.', array('status' => 403));
    }
    return $access;
}
add_filter('rest_authentication_errors', 'wpkeys_disable_rest_api_for_guests');

Здесь мы проверяем, что пользователь залогинен и имеет роль администратора (способность manage_options). Если нет — доступ к REST API запрещен.

Дополнительные советы по работе с REST API

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

Также рекомендуем ограничить доступ через серверные настройки (например, .htaccess или nginx), если хотите защитить API дополнительным уровнем безопасности.

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

Заключение

REST API — мощный инструмент WordPress, но его использование нужно контролировать. Отключение через код — простой и эффективный способ повысить безопасность и оптимизировать сайт. Используйте фильтр rest_authentication_errors для гибкого ограничения доступа, а при необходимости — фильтр rest_endpoints для удаления отдельных маршрутов.

Как автоматизировать удаление старых просмотров в WordPress
01.02.2026
Как избежать конфликтов между плагинами WordPress: практические советы и кодовые примеры
04.03.2026
Как использовать хуки для отложенного выполнения кода в WordPress
28.01.2026
Узнать правила изменения URL в WordPress без потери трафика
03.11.2025
WooCommerce: автоматическое изменение наличия товара после отмены заказа
19.07.2026

На оформлении, скоро здесь появится полноценный ресурс