Eliminar los enlaces de la API JSON en el encabezado html

33

¿Alguien sabe cómo eliminar los enlaces de la API JSON de WordPress en la etiqueta del encabezado?

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

Me gustaría evitar usar un complemento. Si es posible, ¿hay alguna forma de eliminarlos con la función remove_action?

remove_action( 'wp_head', 'rsd_link' );
Jordán
fuente

Respuestas:

30

Veo en filtros.php "add_action ('wp_head', 'rest_output_link_wp_head', 10, 0)" Lo que me hace pensar que esto debería ser el truco para eliminar rel='https://api.w.org/'.

remove_action( 'wp_head',      'rest_output_link_wp_head'              );

El resto ... * tos * parece estar en default-filters.php

remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         );

Para eliminar el rest_output_link_header

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

Referencia

jgraup
fuente
1
gracias pero esto no elimina el api.w.orgenlace para mí.
IXN
Los probé todos, pero el encabezado api.w.org no se moverá. Esto ya no parece funcionar en las versiones recientes de WordPress.
Prahlad Yeri
1
¡Muy bien, funcionó! Resulta que tienes que poner esto en el tema function.php. Estaba tratando de poner esto en mi complemento personalizado para que funcione para todos los temas, pero aparentemente eso no funciona.
Prahlad Yeri
26

Esta función personalizada debería ayudar a eliminar todos los enlaces en el encabezado y pie de página; puede ponerlo dentro del functions.phparchivo de su tema activo;

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

Y este fragmento deshabilita completamente la API REST y muestra el contenido a continuación cuando visita http://example.com/wp-json/, donde se example.comencuentra el nombre de dominio de su sitio web;

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

Para deshabilitar la API REST de WordPress, use el fragmento a continuación;

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
fuente
¿Es necesario eliminar wp_oembed_add_discovery_linksde la cabeza dos veces con diferentes prioridades o es un error tipográfico?
Bryan Willis
También en el disable_json_api()caso de que use la última versión de wordpress, ¿podemos incluir los filtros de la versión 2.x o ambos son necesarios?
Bryan Willis
3
A la función personalizada le falta la función disable_embeds_rewrites. La fuente completa se puede encontrar en github.com/swissspidy/disable-embeds/blob/master/… .
Drakes
@ Drakes Sí, tienes razón. Le falta porque este código no se ha actualizado desde que se publicó el año pasado. ¿Por qué no modificar / actualizar el fragmento anterior para ayudar a otros aquí? Eso sería útil y útil;)
Jentan Bernardus
1
Prefiero utilizar el complemento Deshabilitar incrustaciones en lugar de copiar solo la mitad en el complemento o tema. Es más a prueba de futuro.
swissspidy