Supprimer les liens de l'API JSON dans l'en-tête html

33

Est-ce que quelqu'un sait comment supprimer les liens de l'API JSON de WordPress dans la balise d'en-tête?

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

Je voudrais éviter d'utiliser un plugin. Si possible, y a-t-il un moyen de les supprimer avec la fonction remove_action?

remove_action( 'wp_head', 'rsd_link' );
Jordan
la source

Réponses:

30

Je vois dans filters.php "add_action ('wp_head', 'rest_output_link_wp_head', 10, 0)" Ce qui me fait penser que cela devrait permettre de supprimer l’astuce rel='https://api.w.org/'.

remove_action( 'wp_head',      'rest_output_link_wp_head'              );

Le reste ... * la toux * semble être dans default-filters.php

remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         );

Pour supprimer le rest_output_link_header

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

Référence

Jgraup
la source
1
merci mais cela ne supprime pas le api.w.orglien pour moi.
IXN
Je les ai tous essayés, mais l'en-tête api.w.org ne bouge pas! Cela ne semble plus fonctionner dans les versions récentes de wordpress.
Prahlad Yeri
1
D'accord, ça a fonctionné! Il s'avère que vous devez mettre cela dans le thème function.php. J'essayais de mettre cela dans mon plugin personnalisé afin que cela fonctionne pour tous les thèmes, mais apparemment cela ne fonctionne pas.
Prahlad Yeri
26

Cette fonction personnalisée devrait permettre de supprimer tous les liens de l’en-tête et du pied de page. Vous pouvez les insérer dans le functions.phpfichier de votre thème actif.

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

Et cet extrait de code désactive complètement l’API REST et affiche le contenu ci-dessous lors de votre visite http://example.com/wp-json/, où example.comest le nom de domaine de votre site Web;

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

Pour désactiver l'API REST de WordPress, utilisez l'extrait de code ci-dessous.

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
la source
Est-il nécessaire de retirer wp_oembed_add_discovery_linksdeux fois de la tête avec des priorités différentes ou est-ce une faute de frappe?
Bryan Willis
De même, disable_json_api()si vous utilisez la dernière version de wordpress, pouvons-nous simplement inclure les filtres de la version 2.x ou les deux sont-ils nécessaires?
Bryan Willis
3
La fonction personnalisée manque la fonction disable_embeds_rewrites. La source complète est disponible sur github.com/swissspidy/disable-embeds/blob/master/… .
Drakes
@Drakes Oui, vous avez raison. Il manque le code parce que ce code n'a pas été mis à jour depuis sa publication l'année dernière. Pourquoi ne pas modifier / mettre à jour l'extrait de code ci-dessus pour aider les autres ici? Ce serait utile et pratique;)
Jentan Bernardus
1
Je recommanderais plutôt d'utiliser le plugin Disable Embeds au lieu de n'en copier que la moitié dans votre plugin ou votre thème. C'est plus à l'épreuve du futur.
swissspidy