Вы поставили плагин «отключить REST API» — сайт открывается, а клиенты пишут: кнопка «Отправить» крутится. У Игоря из салона в консоли была ошибка wp-json/contact-form-7. Вы не знаете, что оставить открытым для Contact Form 7. Нужно не вырубить API целиком, а закрыть гостям лишнее и сохранить форму. За вечер: настройка, два теста в инкогнито, заявка снова на почте.
REST API в WordPress — это служебный «коридор» по адресу /wp-json/: через него формы, блок-редактор и обновления обмениваются данными с сайтом. Официальный FAQ прямо говорит: API нельзя отключать полностью — сломается админка. С 4.7 вместо старого rest_enabled используют фильтр rest_authentication_errors: гостям — ошибка доступа, залогиненным — как обычно. Contact Form 7 для незалогиненных отправителей REST нужен; автор плагина Disable WP REST API даёт отдельный гайд по белому списку — и в отзывах на wordpress.org одна звезда как раз за «форма перестала работать».
Один раз назовём термин: REST API (служебный интерфейс сайта) — не «дыра для хакеров», а необходимая часть WordPress. Ограничивают не его существование, а то, что видит гость без пароля. Угол простой: закрыть витрину с логинами для прохожих, но не отрубить провод к форме заявки.
- Поймите, зачем закрывают wp-json для гостей и что нельзя вырубать целиком
- Выберите путь: плагин с белым списком, «одна кнопка» или код в дочерней теме
- Настройте плагин с whitelist: блок гостей и маршруты Contact Form 7
- Добавьте официальный код, если плагин не подходит
- Проверьте результат двумя тестами без SSH и зафиксируйте успех
- Если заявка снова «крутится»: откат, F12 и что написать в поддержку
- Частые вопросы
- Можно ли полностью отключить REST API в WordPress?
- Ломает ли блокировка REST форму заявки?
- Нужен ли REST API для Gutenberg?
- Чем REST API отличается от XML-RPC?
- Нужен ли JWT или REST API Guard обычному лендингу?
- Какой плагин проще: DRA или Disable WP REST API?
Поймите, зачем закрывают wp-json для гостей и что нельзя вырубать целиком

Любой может открыть в браузере адрес вида https://ваш-сайт.ru/wp-json/wp/v2/users и увидеть список имён пользователей — удобно ботам для подбора пароля к входу /wp-admin/. На практике это не мгновенный взлом, но лишняя подсказка. Ограничение для гостей не заменяет нормальный пароль и обновления — это один слой рядом с отключением редактора файлов в админке.
Типичная ошибка — плагин «Disable WP REST API» без whitelist: для гостей API закрыт, код 401, а в админке всё выглядит нормально, пока клиент не напишет в мессенджер. Полный бан бьёт и по CF7, и по виджетам. Для сайта услуг достаточно закрыть users и лишнее, форму оставить.
Выберите путь: плагин с белым списком, «одна кнопка» или код в дочерней теме

Если на сайте есть публичная форма заявки — не берите самый простой «выключить всё для гостей» без настроек. Три рабочих уровня:
| Способ | Кому подходит | Риск для формы | Гибкость |
|---|---|---|---|
| Disable WP REST API | Лендинг без CF7/WPForms | Высокий — форма часто ломается | Низкая |
| Disable REST API (DRA) или REST API Guard | Владелец с формой на сайте | Низкий при whitelist namespace | Средняя и выше |
| MaxtDesign REST API Control | Уже стоит Contact Form 7 | Ниже — CF7 часто в whitelist автоматически | Средняя |
| Код rest_authentication_errors в дочерней теме | Есть дочерняя тема или Code Snippets | Зависит от вашего исключения для contact-form-7 | Максимальная |
Вердикт: для салона, клиники или мастера с CF7 начните с DRA или MaxtDesign, добавьте в белый список namespace contact-form-7. «Одна кнопка» Disable WP REST API — только если форм на фронте нет и вы проверили это дважды.
Код правят не в файлах ядра, а в дочерней теме или через плагин сниппетов — соседняя тема кластера безопасности: DISALLOW_FILE_EDIT в wp-config.
Настройте плагин с whitelist: блок гостей и маршруты Contact Form 7

Workflow для DRA (Disable REST API на wordpress.org/plugins/disable-json-api): установить → включить блок для неавторизованных → добавить исключения → очистить кэш → проверить форму.
- Шаг 1. Сделайте бэкап или хотя бы запишите, какие плагины безопасности уже стоят — два «REST killer» вместе часто ломают сайт сильнее одного.
- Шаг 2. Установите Disable REST API (DRA) или MaxtDesign REST API Control из каталога WordPress. Активируйте режим «запретить анонимный доступ» / «disable for guests» — формулировки зависят от плагина.
- Шаг 3. В белый список маршрутов или namespace добавьте contact-form-7 (и при необходимости wpforms). У CF7 типичные пути под contact-form-7/v1: refill, feedback, feedback/schema — их описывают в гайдах вроде perishablepress.com для связки с REST-блокировкой.
- Шаг 4. Сохраните настройки и сбросьте кэш хостинга или плагина — часто форма «молчит» из-за старого JS, а не из-за REST.
- Шаг 5. В админке откройте запись в блок-редакторе: сохранение без ошибки значит, залогиненным API не отрезали.
REST API Shield предупреждает: без whitelist формы для гостей могут не отправляться.
Добавьте официальный код, если плагин не подходит
Developer.wordpress.org рекомендует хук rest_authentication_errors и is_user_logged_in(): гость получает ошибку на wp-json, кроме явно разрешенных адресов. Код в functions.php дочерней темы; исключение contact-form-7 — через DRA или мини-whitelist. На GitHub есть gist-сниппеты «REST only for logged in» — сверяйте с FAQ ядра перед вставкой. Gutenberg ломается чаще от полного бана, чем от этой схемы.
Проверьте результат двумя тестами без SSH и зафиксируйте успех
Критерии из чек-листа: в окне инкогнито запрос к https://ваш-сайт.ru/wp-json/wp/v2/users даёт ошибку доступа (401 или 403), а не JSON со списком логинов; тестовая заявка с формы приходит на почту или в CRM; в админке редактор блоков и обновления работают; в настройках плагина в whitelist указан contact-form-7 или аналог.
- Тест A. Откройте браузер в режиме инкогнито, вставьте в адресную строку …/wp-json/wp/v2/users. Должна быть ошибка, не таблица имён.
- Тест B. На главной отправьте форму с тестовым email и пометкой «тест REST». Письмо или уведомление CRM должно прийти за разумное время.
- Тест C. Под своим логином зайдите в админку, откройте запись, измените абзац, обновите — без белого экрана и без бесконечной загрузки.
Для владельца бизнеса пары тестов users + форма обычно достаточно. Если все три пункта success-критерия выполнены, можно считать задачу закрытой до следующего обновления плагина безопасности.
Если заявка снова «крутится»: откат, F12 и что написать в поддержку
На практике цепочка восстановления такая: деактивировать последний REST-плагин → очистить кэш → повторить тест B → нажать F12 в Chrome, вкладка Network, снова отправить форму и найти красную строку с wp-json в URL. Если в ошибке contact-form-7 — вернитесь в whitelist. WooCommerce и тяжёлые виджеты иногда требуют свой namespace в белом списке — проверяйте корзину в инкогнито так же, как форму.
После двух тестов всё ещё тишина — приложите скрин вкладки Network и список плагинов безопасности. Можно написать через форму на сайте (мессенджер, без звонка) или в канал t.me/DikiiTelegram. Если некогда разбираться на боевом сайте, задачу можно передать через раздел услуг — настройка WordPress и SEO-статьи. Ещё материалы по безопасности и контенту — в каталоге статей.
Материал проверен: Андрей Дикий (создаёт сайты и продвигает их статьями, SEO/GEO).
Достоверность данных: developer.wordpress.org (REST API FAQ, rest_authentication_errors, authentication handbook); wordpress.org/plugins (disable-wp-rest-api, disable-json-api, rest-api-guard, rest-api-shield, maxtdesign-rest-api-control); тред CF7 + Disable REST API; perishablepress.com (whitelist CF7); GitHub dmchale/disable-json-api и gist khromov; сверка 2026-10-03. Частотность запросов: Яндекс Вордстат, прогон 2026-10-03 (MCP недоступен, точные показы не верифицированы).
Частые вопросы
Можно ли полностью отключить REST API в WordPress?
Нет, если вы пользуетесь современной админкой и блок-редактором. Официальный FAQ предлагает ограничивать гостей через rest_authentication_errors, а не «выключатель навсегда». Полное отключение ломает то, от чего зависит панель управления.
Ломает ли блокировка REST форму заявки?
Ломает, если закрыть API для гостей без исключений. Contact Form 7 для отправки с главной страницы ходит в wp-json/contact-form-7/… — этот namespace нужно оставить в whitelist или не ставить «тотальный» плагин без настроек.
Нужен ли REST API для Gutenberg?
Да для работы редактора блоков и многих экранов админки. Поэтому схема «только гостям запрет» с is_user_logged_in() — стандарт: клиент форму отправляет, вы правите статьи в админке.
Чем REST API отличается от XML-RPC?
Это два разных служебных входа в старый и новый WordPress. XML-RPC часто отключают отдельно (pingback, старые клиенты). REST — то, что используют формы, блоки и мобильные сценарии с 4.7+. Закрывать «всё подряд» одним плагином без чтения описания рискованно.
Нужен ли JWT или REST API Guard обычному лендингу?
Для сайта услуг с формой и без мобильного приложения к вашему API обычно хватит «гостям закрыто + whitelist формы». JWT и жёсткие схемы Guard — для разработчиков и headless; не усложняйте, пока не требует задача.
Какой плагин проще: DRA или Disable WP REST API?
Disable WP REST API — один клик, но опаснее для CF7. DRA настраивается дольше, зато есть белый список — меньше шанс повторить историю с крутящейся кнопкой.
