Usuń łącza JSON API w html nagłówka

33

Czy ktoś wie, jak usunąć linki JSON API WordPress w tagu nagłówka?

<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>

Chciałbym uniknąć używania wtyczki. Jeśli to możliwe, czy istnieje sposób ich usunięcia za pomocą funkcji remove_action?

remove_action( 'wp_head', 'rsd_link' );
Jordania
źródło

Odpowiedzi:

30

Widzę w Filtry.php „Add Działalności („ wp_head ”,„ rest_output_link_wp_head ”, 10, 0)” Co sprawia, że ​​myślę, że to powinno rozwiązać problem rel='https://api.w.org/'.

remove_action( 'wp_head',      'rest_output_link_wp_head'              );

Reszta ... * kaszel * wydaje się znajdować w default-filter.php

remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         );

Aby usunąć nagłówek rest_output_link_header

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

Odniesienie

jgraup
źródło
1
dzięki, ale to nie usuwa api.w.orgdla mnie linku.
IXN
Próbowałem wszystkich, ale nagłówek api.w.org się nie porusza! To wydaje się już nie działać w najnowszych wersjach wordpress.
Prahlad Yeri
1
W porządku, zadziałało! Okazuje się, że musisz umieścić to w motywie function.php. Próbowałem umieścić to w mojej niestandardowej wtyczce, aby działała dla wszystkich motywów, ale najwyraźniej to nie działa.
Prahlad Yeri
26

Ta niestandardowa funkcja powinna pomóc w usunięciu wszystkich łączy w nagłówku i stopce - możesz umieścić ją w functions.phppliku aktywnego motywu;

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

A ten fragment całkowicie wyłącza interfejs API REST i pokazuje treść poniżej, gdy odwiedzasz http://example.com/wp-json/, gdzie example.comjest nazwa domeny Twojej witryny;

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

Aby wyłączyć interfejs API REST WordPress, użyj poniższego fragmentu;

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' );
Jentan Bernardus
źródło
Czy konieczne jest wp_oembed_add_discovery_linksdwukrotne usunięcie głowy z różnymi priorytetami, czy to literówka?
Bryan Willis,
Również w disable_json_api()przypadku korzystania z najnowszego wordpressa możemy po prostu dołączyć filtry w wersji 2.x lub oba są potrzebne?
Bryan Willis,
3
W funkcji niestandardowej brakuje funkcji disable_embeds_rewrites. Pełne źródło można znaleźć na stronie github.com/swissspidy/disable-embeds/blob/master/… .
Drakes
@Drakes Tak, masz rację. Brakuje go, ponieważ ten kod nie został zaktualizowany, ponieważ został opublikowany w zeszłym roku. Dlaczego nie zmodyfikować / zaktualizować powyższego fragmentu, aby pomóc innym tutaj? Byłoby to pomocne i przydatne;)
Jentan Bernardus
1
Wolę raczej użyć wtyczki Disable Embeds zamiast kopiować tylko połowę z niej do wtyczki lub motywu. Jest bardziej przyszłościowy.
swissspidy