WordPress: отключаем REST API (wp-json)

  • 23.04.2020
  • 421
  • 0
  • 24.04.2020
  • 1
  • 1
  • 0
WordPress: отключаем REST API (wp-json)

По-умолчанию в CMS WordPress включен REST API, использовать который можно по ссылке:

https://имя_сайта/wp-json/

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

Описание

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

Отключаем WORDPRESS REST API

Способ 1 (используя плагин)

Для тех, кто боится вручную редактировать файлы темы, есть возможность установить специальный плагин, который отключает REST API.
Ссылка на плагин: https://wordpress.org/plugins/disable-json-api/
Устанавливаете плагин, активируете его и проверяете, что доступ ограничился.

Способ 2 (без использования плагина)

К сожалению легкого способа с полным отключением REST API я не нашел (только отключение всех его фильтров и событий), но есть способ с помощью которого, можно заставить его всегда отдавать ошибку при обращении к соответствующему url адресу на вашем сайте https://имя_сайта/wp-json/
Для этого необходимо добавить следующие строчки в файл functions.php активной темы оформления:

add_filter( 'rest_authentication_errors', function( $result ) {
	return new WP_Error( 'functionality disabled', 'Sorry, rest API is disabled.', array( 'status' => 401 ) );
});

После чего при обращении к wp-json будет выводиться ошибка с кодом 401:

Если же вы хотите оставить возможность доступа к REST API только авторизованным пользователям, то тогда код будет выглядеть следующем образом:

add_filter( 'rest_authentication_errors', function( $result ) {
	if (!empty( $result)) {
		return $result;
	}
	if (!is_user_logged_in()) {
		return new WP_Error('rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
	}
	return $result;
});
Была ли эта статья Вам полезна?

Добавить комментарий

Ваш адрес email не будет опубликован.

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.