Eliminar enlaces de la API JSON en el encabezado html
¿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 plugin. Si es posible, ¿hay alguna manera de eliminarlos con la función remove_action?
remove_action( 'wp_head', 'rsd_link' );

Veo en filters.php "add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 )" lo que me hace pensar que esto debería funcionar para eliminar rel='https://api.w.org/'
.
remove_action( 'wp_head', 'rest_output_link_wp_head' );
El resto... * tos * parecen 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 );
Referencias

Probé todos, ¡pero el encabezado api.w.org no se mueve! Esto ya no parece funcionar en las versiones recientes de WordPress.

Esta función personalizada puede ayudar a eliminar todos los enlaces en el encabezado y pie de página - puedes colocarla dentro del archivo functions.php
de tu tema activo;
function remove_json_api () {
// Elimina las líneas de la API REST del encabezado HTML
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
// Elimina el endpoint de la API REST
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
// Desactiva la detección automática de oEmbed
add_filter( 'embed_oembed_discover', '__return_false' );
// No filtra los resultados de oEmbed
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
// Elimina los enlaces de descubrimiento de oEmbed
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
// Elimina el JavaScript específico de oEmbed del front-end y back-end
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
// Elimina todas las reglas de reescritura de embeds
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
}
add_action( 'after_setup_theme', 'remove_json_api' );
Y este fragmento desactiva completamente la API REST y muestra el contenido a continuación cuando visitas http://example.com/wp-json/
, donde example.com
es el nombre de dominio de tu sitio web;
{"code":"rest_disabled","message":"La API REST está desactivada en este sitio."}
Para desactivar la API REST de WordPress, usa el siguiente fragmento;
function disable_json_api () {
// Filtros para la versión 1.x de WP-API
add_filter( 'json_enabled', '__return_false' );
add_filter( 'json_jsonp_enabled', '__return_false' );
// Filtros para la versión 2.x de WP-API
add_filter( 'rest_enabled', '__return_false' );
add_filter( 'rest_jsonp_enabled', '__return_false' );
}
add_action( 'after_setup_theme', 'disable_json_api' );

¿Es necesario eliminar wp_oembed_add_discovery_links
del head dos veces con diferentes prioridades o es un error tipográfico?

También en el disable_json_api()
, si se usa la última versión de WordPress, ¿podemos incluir solo los filtros de la versión 2.x o se necesitan ambos?

A la función personalizada le falta la función disable_embeds_rewrites
. El código fuente completo se puede encontrar en https://github.com/swissspidy/disable-embeds/blob/master/disable-embeds.php.

@Drakes Sí, tienes razón. Falta porque este código no se ha actualizado desde que se publicó el año pasado. ¿Por qué no modificas/actualizas el fragmento de código anterior para ayudar a otros aquí? Sería útil y práctico ;)

Recomendaría más bien usar el plugin Disable Embeds en lugar de copiar solo la mitad en tu plugin o tema. Es más resistente a futuros cambios.

La mejor solución y la forma más sencilla de desactivar los enlaces de descubrimiento oEmbed y wp-embed.min.js es agregando este fragmento de código en tu 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);
Espero que esto pueda ayudar a alguien, ya que las soluciones anteriores no funcionaron para mí al usar la última versión de WordPress.
