Elimină link-urile API JSON din header-ul html
Știe cineva cum să elimine link-urile WordPress API JSON din tag-ul 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>
Aș dori să evit folosirea unui plugin. Dacă este posibil, există o modalitate de a le elimina folosind funcția remove_action?
remove_action( 'wp_head', 'rsd_link' );

Văd în filters.php add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 )
, ceea ce mă face să cred că asta ar trebui să rezolve problema pentru a elimina rel='https://api.w.org/'
.
remove_action( 'wp_head', 'rest_output_link_wp_head' );
Restul... * tușește * par să fie în default-filters.php
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
Pentru a elimina rest_output_link_header
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
Referințe

Am încercat toate metodele, dar antetul api.w.org refuză să dispară! Se pare că această soluție nu mai funcționează în versiunile recente de WordPress.

Această funcție personalizată ar trebui să ajute la eliminarea tuturor link-urilor din header și footer - o puteți adăuga în fișierul functions.php
al temei active;
function remove_json_api () {
// Elimină liniile REST API din Header-ul HTML
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
// Elimină endpoint-ul REST API
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
// Dezactivează auto-descoperirea oEmbed
add_filter( 'embed_oembed_discover', '__return_false' );
// Nu filtrează rezultatele oEmbed
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
// Elimină link-urile de descoperire oEmbed
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
// Elimină JavaScript-ul specific oEmbed din front-end și back-end
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
// Elimină toate regulile de rewrite pentru embed-uri
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
}
add_action( 'after_setup_theme', 'remove_json_api' );
Iar acest fragment de cod dezactivează complet REST API și afișează conținutul de mai jos când accesați http://example.com/wp-json/
, unde example.com
este numele de domeniu al site-ului dvs.;
{"code":"rest_disabled","message":"The REST API is disabled on this site."}
Pentru a dezactiva WordPress REST API, utilizați fragmentul de cod de mai jos;
function disable_json_api () {
// Filtre pentru WP-API versiunea 1.x
add_filter( 'json_enabled', '__return_false' );
add_filter( 'json_jsonp_enabled', '__return_false' );
// Filtre pentru WP-API versiunea 2.x
add_filter( 'rest_enabled', '__return_false' );
add_filter( 'rest_jsonp_enabled', '__return_false' );
}
add_action( 'after_setup_theme', 'disable_json_api' );

Este necesar să eliminăm wp_oembed_add_discovery_links
din head de două ori cu priorități diferite sau este o greșeală de tipar?

De asemenea, în disable_json_api()
, dacă folosim ultima versiune de WordPress, putem include doar filtrele pentru versiunea 2.x sau sunt necesare ambele?

Funcția personalizată nu include funcția disable_embeds_rewrites
. Sursa completă poate fi găsită la https://github.com/swissspidy/disable-embeds/blob/master/disable-embeds.php.

@Drakes Da, ai dreptate. Lipsește pentru că acest cod nu a fost actualizat de când a fost postat anul trecut. De ce nu modifici/actualizezi fragmentul de cod de mai sus pentru a-i ajuta pe ceilalți? Ar fi util și la îndemână ;)

Aș recomanda mai degrabă să folosești plugin-ul Disable Embeds în loc să copii doar jumătate din el în plugin-ul sau tema ta. Este mai sigur pentru viitor.

Cea mai bună soluție și cea mai ușoară metodă de a dezactiva link-urile de descoperire oEmbed și wp-embed.min.js este prin adăugarea acestui fragment de cod în tema ta (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);
Sper că acest lucru poate ajuta pe cineva, deoarece soluțiile menționate mai sus nu au funcționat pentru mine în timp ce foloseam cea mai recentă versiune de WordPress.
