Rimuovere i link API JSON nell'header html
Qualcuno sa come rimuovere i link dell'API JSON di WordPress nel tag 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>
Vorrei evitare di utilizzare un plugin. Se possibile, c'è un modo per rimuoverli con la funzione remove_action?
remove_action( 'wp_head', 'rsd_link' );

Vedo in filters.php "add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 )" il che mi fa pensare che questo dovrebbe funzionare per rimuovere rel='https://api.w.org/'
.
remove_action( 'wp_head', 'rest_output_link_wp_head' );
Il resto... *tosse* sembra essere in default-filters.php
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
Per rimuovere il rest_output_link_header
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
Riferimenti

Ho provato tutti, ma l'header api.w.org non si muove! Sembra che questo non funzioni più nelle versioni recenti di WordPress.

Questa funzione personalizzata ti aiuterà a rimuovere tutti i link nell'header e nel footer - puoi inserirla nel file functions.php
del tuo tema attivo;
function remove_json_api () {
// Rimuove le righe della REST API dall'HTML Header
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
// Rimuove l'endpoint della REST API
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
// Disabilita la scoperta automatica degli oEmbed
add_filter( 'embed_oembed_discover', '__return_false' );
// Non filtra i risultati degli oEmbed
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
// Rimuove i link di scoperta degli oEmbed
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
// Rimuove il JavaScript specifico per oEmbed dal front-end e back-end
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
// Rimuove tutte le regole di rewrite degli embed
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
}
add_action( 'after_setup_theme', 'remove_json_api' );
Questo snippet disabilita completamente la REST API e mostra il contenuto qui sotto quando visiti http://example.com/wp-json/
, dove example.com
è il dominio del tuo sito;
{"code":"rest_disabled","message":"La REST API è disabilitata su questo sito."}
Per disabilitare la WordPress REST API, usa lo snippet qui sotto;
function disable_json_api () {
// Filtri per la versione 1.x di WP-API
add_filter( 'json_enabled', '__return_false' );
add_filter( 'json_jsonp_enabled', '__return_false' );
// Filtri per la versione 2.x di WP-API
add_filter( 'rest_enabled', '__return_false' );
add_filter( 'rest_jsonp_enabled', '__return_false' );
}
add_action( 'after_setup_theme', 'disable_json_api' );

È necessario rimuovere wp_oembed_add_discovery_links
dall'head due volte con priorità diverse o è un errore di battitura?

Inoltre, nella funzione disable_json_api()
, se si utilizza l'ultima versione di WordPress, possiamo includere solo i filtri per la versione 2.x o sono necessari entrambi?

Manca la funzione personalizzata disable_embeds_rewrites
. Il codice sorgente completo è disponibile su https://github.com/swissspidy/disable-embeds/blob/master/disable-embeds.php.

@Drakes Sì, hai ragione. Manca perché questo codice non è stato aggiornato da quando è stato pubblicato l'anno scorso. Perché non modificare/aggiornare lo snippet qui sopra per aiutare gli altri invece? Sarebbe utile e pratico ;)

Consiglierei piuttosto di usare il plugin Disable Embeds invece di copiarne solo metà nel tuo plugin o tema. È più a prova di futuro.

La soluzione migliore e più semplice per disabilitare i link di scoperta oEmbed e wp-embed.min.js è aggiungere questo snippet di codice nel tema (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);
Spero che questo possa aiutare qualcuno, dato che le soluzioni sopra indicate non funzionano per me mentre utilizzo l'ultima versione di WordPress.
