WP-JSON как отключить

Все началось с того, что заметил в Яндекс Вебмастер вот такую ссылку, прямо скажем 18+ содержания. Которая ссылалась на папку /wp-json/ моего сайта:

wp-json

Это не взлом, таким образом дорвейщики берут данные вашего сайта для своих доров. Не смертельно, но неприятно. Да и не понятно как отнесется сам Яндекс к таким ссылкам на ваш сайт.

Если не отключить wp-json, то он дает возможность узнать конфиденциальную информацию о пользователях.

Например, по адресу http://siteask.ru/wp-json/wp/v2/users/ ранее выдавалась информация о админах и авторах сайта с их личными данными: логин, gravatar и пр.

WP JSON — это сокращение от WordPress JSON REST API. Эта функция появилась в WordPress начиная с версии 4.4. Простым языком — это функционал, с помощью которого для WordPress можно писать приложения на разных платформах и на разных языках, и с помощью этого приложения управлять сайтом: добавлять, изменять и удалять содержимое, настраивать темы, меню, виджеты и прочее.

Для большинства пользователей wp-json — совершенно не нужен и даже вреден. Яндекс любит брать wp-json в индекс как подраздел сайта. Это конечно легко лечится закрытием от индексирования /wp-json/ в robots.txt, но лучше отключим эту функцию и настроим редирект с /wp-json/ на главную страницу.

Для этого добавим в файл functions.php вашей темы WordPress следующий код:

// Отключаем сам REST API
 add_filter('rest_enabled', '__return_false');
// Отключаем события REST API
 remove_action( 'init', 'rest_api_init' );
 remove_action( 'rest_api_init', 'rest_api_default_filters', 10, 1 );
 remove_action( 'parse_request', 'rest_api_loaded' );
// Отключаем Embeds связанные с REST API
 remove_action( 'rest_api_init', 'wp_oembed_register_route' );
 remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4 );
// Отключаем фильтры REST API
 remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
 remove_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );
 remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
 remove_action( 'auth_cookie_malformed', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_expired', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_bad_username', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_bad_hash', 'rest_cookie_collect_status' );
 remove_action( 'auth_cookie_valid', 'rest_cookie_collect_status' );
 remove_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 );
//Отключаем type="application/json+oembed"
 remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
 remove_action( 'wp_head', 'rest_output_link_wp_head' );
 remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
Отключая функционал WordPress REST API, помните, что его используют некоторые популярные плагины, например Contact Form 7. Поэтому, если вдруг у вас перестала работать форма обратной связи, посмотрите, а не отключен ли REST API?

Если у вас на сайте стоит плагин Yoast SEO, то в коде страницы вы обнаружите еще одно упоминание json:

Разметка json

Это вариант микроразметки JSON-LD предлагаемый плагином SEO by Yoast в качестве бонуса. Большинство сайтов по умолчанию используют микроразмектку schema.org и от данного скрипта json можно отказаться поместив в functions.php следующий код:

// Убираем <script type='application/ld+json'>
 function remove_json_ld_output( $data ) {
  $data = array();
  return $data;
 }
 add_filter('wpseo_json_ld_output', 'remove_json_ld_output', 10, 1);

Перед использованием не забываем обновить кеш.

Оцените, пожалуйста, статью, я старался :)

Задайте вопрос в комментариях

3 × три =