REST API в WordPress часто отключают из соображений безопасности или чтобы убрать лишние запросы к сайту. Но полное отключение подходит не всем: современная тема, редактор блоков, некоторые плагины и внешние интеграции могут использовать этот интерфейс для работы. Поэтому сначала стоит понять, нужен ли вам именно запрет, или достаточно ограничить доступ для незалогиненных пользователей.
Если коротко: полностью отключать REST API имеет смысл только на сайте, где вы точно не используете функции, завязанные на него. Во всех остальных случаях безопаснее закрыть доступ частично — например, для гостей, но оставить его для авторизованных пользователей и внутренних запросов сайта.
Когда REST API можно отключить полностью
Полное отключение уместно на очень простых сайтах, где:
- не используется редактор блоков Gutenberg;
- нет фронтенд-логики, которая получает данные через REST API;
- нет мобильных приложений, внешних сервисов и кастомных интеграций;
- вы уверены, что тема и плагины не обращаются к эндпоинтам вида
/wp-json/.
Если сайт старый, статичный и обслуживается без современных интеграций, отключение действительно может уменьшить поверхность атаки и убрать часть фоновых обращений. Но если вы не уверены, лучше сначала ограничить доступ, а не рубить API целиком.
Когда лучше не отключать, а ограничить доступ
Ограничение доступа — более безопасный вариант для большинства сайтов. Оно помогает закрыть REST API от случайных запросов извне, но не ломает работу WordPress там, где API нужен самому сайту.
Этот подход особенно полезен, если:
- сайт работает на актуальной теме;
- используются блоки, виджеты или плагины, которые подгружают данные через REST API;
- нужна защита от массового сканирования и лишних запросов;
- вы не хотите разбираться, какой именно плагин зависит от API.
На практике это лучший первый шаг: вы проверяете, не ломается ли сайт, и только потом решаете, нужно ли отключать REST API полностью.
Как отключить REST API через код
Самый прямой способ — добавить фильтр в functions.php дочерней темы или, что надежнее, в небольшой mu-plugin. Если вы редактируете тему, помните: обновление может затереть изменения. Для постоянного решения лучше использовать отдельный мини-плагин.
Этот вариант полностью отключает REST API для фронтенда и возвращает ошибку для запросов к /wp-json/. Перед применением сделайте резервную копию и проверьте сайт на тестовой копии, если она есть.
<?php
add_filter( 'rest_authentication_errors', function( $result ) {
if ( true === $result || is_wp_error( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error(
'rest_disabled',
'REST API отключён на этом сайте.',
array( 'status' => 403 )
);
}
return $result;
} );Этот код не отключает REST API для авторизованных пользователей, а значит, админка и часть внутренних сценариев продолжают работать. Если вам нужен именно полный запрет для всех, можно убрать проверку is_user_logged_in(), но это уже более рискованный вариант: он чаще ломает редактор и плагины.
Как сделать отключение через mu-plugin
Если не хотите править тему, создайте файл, например wp-content/mu-plugins/disable-rest-api.php. Папка mu-plugins может потребовать ручного создания, если её нет. WordPress подхватывает такие плагины автоматически, и они не отключаются из админки.
Содержимое файла может быть тем же, что и в примере выше. После загрузки файла очистите кэш, если он есть, и проверьте доступ к /wp-json/.
Как ограничить доступ к REST API вместо полного отключения
Если задача — не выключить REST API, а закрыть его от посторонних, лучше ограничить доступ только для неавторизованных пользователей. Это особенно удобно, когда вы хотите уменьшить число внешних запросов, но не рисковать работоспособностью сайта.
Ниже пример, который блокирует запросы к REST API для гостей, но оставляет доступ для залогиненных пользователей.
<?php
add_filter( 'rest_authentication_errors', function( $result ) {
if ( true === $result || is_wp_error( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error(
'rest_forbidden',
'Доступ к REST API ограничен.',
array( 'status' => 401 )
);
}
return $result;
} );Разница между этим вариантом и полным отключением в том, что WordPress продолжает работать для авторизованных пользователей, а вы не создаёте лишних проблем для админки и внутренних запросов. Для большинства сайтов это более разумный компромисс.
Что проверить после изменений
После отключения или ограничения доступа не ограничивайтесь тем, что открывается главная страница. Проверьте именно те места, где REST API чаще всего используется:
- откройте
/wp-json/в браузере и посмотрите, какой ответ возвращается; - проверьте вход в админку и работу редактора записей;
- откройте несколько страниц сайта и убедитесь, что нет ошибок JavaScript в консоли браузера;
- если есть формы, фильтры, поиск, динамические блоки или интеграции, протестируйте их отдельно.
Если после изменений в консоли браузера появились ошибки, а блоки или элементы интерфейса перестали подгружаться, значит, сайт использовал REST API. В таком случае лучше откатить полное отключение и перейти на ограничение доступа.
Как понять, что REST API действительно нужен вашему сайту
Самый простой признак — сайт начинает вести себя странно после блокировки: не грузятся блоки в редакторе, не работают динамические элементы, появляются ошибки в админке или на фронтенде. Но даже если явных ошибок нет, это не значит, что API не используется.
На практике я советую такой порядок:
- сначала включить ограничение для гостей, а не полный запрет;
- проверить сайт в обычном сценарии использования;
- если всё работает, можно оставить ограничение как постоянное решение;
- если что-то ломается, вернуть доступ и искать конкретную зависимость.
Такой подход экономит время и снижает риск случайно отключить нужную часть WordPress.
Если нужен более простой способ без ручного кода
Если вы не хотите править файлы темы и контролировать код вручную, можно использовать плагин, который умеет отключать или ограничивать REST API. Это удобнее для владельца сайта без технического опыта, но принцип проверки остаётся тем же: после настройки нужно убедиться, что сайт не потерял нужные функции.
Для задач вроде отключения лишних компонентов WordPress и чистки сайта иногда используют Clearfy Pro. Если вам нужен именно готовый интерфейс для подобных настроек, это может быть удобнее ручного кода. Но даже в этом случае не стоит включать отключение вслепую: сначала проверьте, не завязан ли ваш сайт на REST API.
Если нужен краткий практический вывод, он такой: полностью отключайте REST API только тогда, когда уверены, что он нигде не используется. Во всех остальных случаях лучше ограничить доступ для гостей и оставить WordPress возможность работать штатно. Это безопаснее и обычно даёт тот же эффект с меньшим риском поломок.