Удалить ссылки JSON API в заголовке HTML


33

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

<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' );

Ответы:


30

Я вижу в 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 );

Ссылка


1
спасибо, но это не удаляет api.w.orgссылку для меня.
IXN

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

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

26

Эта пользовательская функция должна помочь удалить все ссылки в верхнем и нижнем колонтитулах - вы можете поместить ее в functions.phpфайл вашей активной темы;

function remove_json_api () {

    // Remove the REST API lines from the HTML Header
    remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );

    // Remove the REST API endpoint.
    remove_action( 'rest_api_init', 'wp_oembed_register_route' );

    // Turn off oEmbed auto discovery.
    add_filter( 'embed_oembed_discover', '__return_false' );

    // Don't filter oEmbed results.
    remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

    // Remove oEmbed discovery links.
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

    // Remove oEmbed-specific JavaScript from the front-end and back-end.
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );

   // Remove all embeds rewrite rules.
   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 () {

  // Filters for WP-API version 1.x
  add_filter( 'json_enabled', '__return_false' );
  add_filter( 'json_jsonp_enabled', '__return_false' );

  // Filters for WP-API version 2.x
  add_filter( 'rest_enabled', '__return_false' );
  add_filter( 'rest_jsonp_enabled', '__return_false' );

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

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

Также в disable_json_api()случае использования последней версии WordPress мы можем просто включить фильтры версии 2.x или оба необходимы?
Брайан Уиллис

3
В пользовательской функции отсутствует функция disable_embeds_rewrites. Полный источник можно найти по адресу github.com/swissspidy/disable-embeds/blob/master/… .
Дрейкс

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

1
Я бы предпочел использовать плагин Disable Embeds вместо того, чтобы копировать только половину его в ваш плагин или тему. Это более перспективно на будущее.
swissspidy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.