Rimuovere i collegamenti API JSON nell'intestazione html


33

Qualcuno sa come rimuovere i collegamenti API JSON WordPress nel tag di intestazione?

<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 usare un plugin. Se possibile, c'è un modo per rimuoverli con la funzione remove_action?

remove_action( 'wp_head', 'rsd_link' );

Risposte:


30

Vedo in filters.php "add_action ('wp_head', 'rest_output_link_wp_head', 10, 0)" Il che mi fa pensare che questo dovrebbe fare il trucco 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 rest_output_link_header

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

Riferimento


1
grazie ma questo non rimuove il api.w.orglink per me.
IXN,

Ho provato tutti, ma l'intestazione api.w.org non si muoverà! Questo sembra non funzionare più nelle recenti versioni di wordpress.
Prahlad Yeri,

1
Va bene, ha funzionato! Si scopre che devi metterlo nel tema function.php. Stavo cercando di inserirlo nel mio plug-in personalizzato in modo che funzioni per tutti i temi, ma a quanto pare non funziona.
Prahlad Yeri,

26

Questa funzione personalizzata dovrebbe aiutare a rimuovere tutti i collegamenti nell'intestazione e nel piè di pagina: è possibile inserirlo nel functions.phpfile del tema attivo;

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

E questo frammento disabilita completamente l'API REST e mostra il contenuto seguente quando visiti http://example.com/wp-json/, dove example.comè il nome di dominio del tuo sito Web;

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

Per disabilitare l'API REST di WordPress, usa lo snippet di seguito;

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

È necessario rimuovere wp_oembed_add_discovery_linksdalla testa due volte con priorità diverse o è un errore di battitura?
Bryan Willis,

Anche disable_json_api()se usando l'ultimo wordpress possiamo includere solo i filtri della versione 2.x o sono entrambi necessari?
Bryan Willis,

3
Nella funzione personalizzata manca la funzione disable_embeds_rewrites. La fonte completa è disponibile all'indirizzo github.com/swissspidy/disable-embeds/blob/master/… .
Drakes,

@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 qui? Sarebbe utile e utile;)
Jentan Bernardus,

1
Preferirei piuttosto utilizzare il plug-in Disable Embeds invece di copiarne solo metà nel plug-in o nel tema. È più a prova di futuro.
swissspidy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.