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.


Ссылка на плагин


Устанавливаете плагин, активируете его и проверяете, что доступ ограничился.

Способ 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;
});