Удаление ссылок JSON API в header html

11 дек. 2015 г., 01:30:16
Просмотры: 61K
Голосов: 41

Кто-нибудь знает, как удалить ссылки WordPress JSON API в теге header?

<head>
...
<link rel='https://api.w.org/' href='http://example.com/wp-json/' />
<link rel="alternate" type="application/json+oembed" href="http://example.com/wp-json/oembed/1.0/embed?url=..." />
<link rel="alternate" type="text/xml+oembed" href="http://example.com/wp-json/oembed/1.0/embed?url=..." />
</head>

Я хотел бы избежать использования плагина. Если возможно, есть ли способ удалить их с помощью функции remove_action?

remove_action( 'wp_head', 'rsd_link' );
0
Все ответы на вопрос 3
3
43

Я вижу в filters.php строку "add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 )", что наводит меня на мысль, что это должно помочь удалить rel='https://api.w.org/'.

remove_action( 'wp_head',      'rest_output_link_wp_head'              );

Остальное... * кашель * похоже находится в default-filters.php

remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         );

Чтобы удалить rest_output_link_header

remove_action( 'template_redirect', 'rest_output_link_header', 11 );

Ссылки

11 дек. 2015 г. 01:38:23
Комментарии

спасибо, но это не убирает ссылку api.w.org в моем случае.

IXN IXN
16 дек. 2015 г. 14:52:24

Попробовал все варианты, но заголовок api.w.org никуда не девается! Похоже, это больше не работает в последних версиях WordPress.

Prahlad Yeri Prahlad Yeri
21 июл. 2018 г. 16:21:52

Отлично, сработало! Оказывается, нужно поместить этот код в файл темы function.php. Я пытался добавить это в свой пользовательский плагин, чтобы работало для всех тем, но, видимо, так не работает.

Prahlad Yeri Prahlad Yeri
21 июл. 2018 г. 16:29:03
7
30

Эта кастомная функция поможет удалить все ссылки в шапке и подвале сайта - вы можете поместить её в файл functions.php вашей активной темы:

function remove_json_api () {

    // Удаляем строки REST API из HTML-шапки
    remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );

    // Удаляем конечную точку REST API
    remove_action( 'rest_api_init', 'wp_oembed_register_route' );

    // Отключаем авто-обнаружение oEmbed
    add_filter( 'embed_oembed_discover', '__return_false' );

    // Не фильтруем результаты oEmbed
    remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

    // Удаляем ссылки обнаружения oEmbed
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

    // Удаляем JavaScript для oEmbed из фронтенда и бэкенда
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );

   // Удаляем все правила перезаписи для эмбедов
   add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

}
add_action( 'after_setup_theme', 'remove_json_api' );

Этот сниппет полностью отключает REST API и показывает следующий контент при посещении http://example.com/wp-json/, где example.com - доменное имя вашего сайта:

{"code":"rest_disabled","message":"The REST API is disabled on this site."}

Для отключения WordPress REST API используйте следующий сниппет:

function disable_json_api () {

  // Фильтры для WP-API версии 1.x
  add_filter( 'json_enabled', '__return_false' );
  add_filter( 'json_jsonp_enabled', '__return_false' );

  // Фильтры для WP-API версии 2.x
  add_filter( 'rest_enabled', '__return_false' );
  add_filter( 'rest_jsonp_enabled', '__return_false' );

}
add_action( 'after_setup_theme', 'disable_json_api' );
20 дек. 2015 г. 23:09:25
Комментарии

Нужно ли удалять wp_oembed_add_discovery_links из заголовка дважды с разными приоритетами, или это опечатка?

Bryan Willis Bryan Willis
5 апр. 2016 г. 19:45:29

Также в функции disable_json_api(), если используется последняя версия WordPress, можно ли оставить только фильтры для версии 2.x или нужны оба?

Bryan Willis Bryan Willis
5 апр. 2016 г. 19:47:46

В пользовательской функции отсутствует функция disable_embeds_rewrites. Полный исходный код можно найти по ссылке https://github.com/swissspidy/disable-embeds/blob/master/disable-embeds.php.

Drakes Drakes
14 июн. 2016 г. 03:46:29

@Drakes Да, ты прав. Это отсутствует, потому что код не обновлялся с момента публикации в прошлом году. Почему бы не изменить/обновить приведённый выше фрагмент, чтобы помочь другим? Это было бы полезно и удобно ;)

Jentan Bernardus Jentan Bernardus
15 июн. 2016 г. 04:42:12

Я полностью оставляю это на твоё усмотрение.

Drakes Drakes
15 июн. 2016 г. 06:19:24

Я бы рекомендовал использовать плагин Disable Embeds вместо того, чтобы копировать только его часть в свой плагин или тему. Это более надёжно в долгосрочной перспективе.

swissspidy swissspidy
20 февр. 2017 г. 17:43:33

rest_enabled устарел, начиная с версии 4.7.0

Max Yudin Max Yudin
8 дек. 2017 г. 20:30:16
Показать остальные 2 комментариев
0

Лучшее и простое решение для отключения oEmbed discovery links и wp-embed.min.js — добавить этот код в файл темы (function.php).

remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 ); remove_action( 'wp_head', 'wp_oembed_add_host_js' ); remove_action('rest_api_init', 'wp_oembed_register_route'); remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);

Надеюсь, это поможет вам, так как предыдущие решения не сработали для меня в последней версии WordPress.

10 мая 2020 г. 19:11:32